diff --git a/parted-implement-wipesignatures-option.patch b/parted-implement-wipesignatures-option.patch new file mode 100644 index 0000000..50d5588 --- /dev/null +++ b/parted-implement-wipesignatures-option.patch @@ -0,0 +1,158 @@ +From 4ff404cc2d7ab74d0b1000c0212318dcbb2dda11 Mon Sep 17 00:00:00 2001 +From: Petr Uzel +Date: Thu, 28 Apr 2016 17:18:44 +0200 +Subject: [PATCH] parted: implement --wipesignatures option + +With this option, parted uses libblkid to wipe superblock signatures +from a disk region where it is about to create a new partition. + +References: bsc#943623 +References: fate#319893 +--- + doc/C/parted.8 | 4 +++ + parted/parted.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 74 insertions(+) + +Index: parted-3.2/doc/C/parted.8 +=================================================================== +--- parted-3.2.orig/doc/C/parted.8 ++++ parted-3.2/doc/C/parted.8 +@@ -30,6 +30,10 @@ never prompts for user intervention + .B -v, --version + displays the version + .TP ++.B --wipesignatures ++mkpart wipes the superblock signatures from the disk region where it is ++about to create the partition ++.TP + .B -a \fIalignment-type\fP, --align \fIalignment-type\fP + Set alignment for newly created partitions, valid alignment types are: + .RS +Index: parted-3.2/parted/parted.c +=================================================================== +--- parted-3.2.orig/parted/parted.c ++++ parted-3.2/parted/parted.c +@@ -57,6 +57,11 @@ + #include "c-strcase.h" + #include "xalloc.h" + ++#include ++#include ++#include ++#include ++ + #ifdef ENABLE_MTRACE + #include + #endif +@@ -76,6 +81,7 @@ static int MEGABYTE_SECTORS (PedDevice* + enum + { + PRETEND_INPUT_TTY = CHAR_MAX + 1, ++ WIPESIGNATURES = CHAR_MAX + 2, + }; + + enum +@@ -117,6 +123,7 @@ static struct option const options[] = { + {"script", 0, NULL, 's'}, + {"version", 0, NULL, 'v'}, + {"align", required_argument, NULL, 'a'}, ++ {"wipesignatures", 0, NULL, WIPESIGNATURES}, + {"-pretend-input-tty", 0, NULL, PRETEND_INPUT_TTY}, + {NULL, 0, NULL, 0} + }; +@@ -128,11 +135,13 @@ static const char *const options_help [] + {"script", N_("never prompts for user intervention")}, + {"version", N_("displays the version")}, + {"align=[none|cyl|min|opt]", N_("alignment for new partitions")}, ++ {"wipesignatures", N_("wipe superblock signatures when creating partition")}, + {NULL, NULL} + }; + + int opt_script_mode = 0; + int pretend_input_tty = 0; ++int wipesignatures = 0; + int opt_machine_mode = 0; + int disk_is_modified = 0; + int is_toggle_mode = 0; +@@ -650,6 +659,56 @@ _adjust_end_if_iec (PedSector* start, Pe + } + } + ++#ifdef USE_BLKID ++static int ++_wipe_signatures (PedDevice *dev, PedSector start, PedSector length) ++{ ++ int fd = open (dev->path, O_RDWR); ++ if (fd == -1) ++ goto error; ++ ++ blkid_loff_t wipe_offset = start * dev->sector_size; ++ blkid_loff_t wipe_size = length * dev->sector_size; ++ ++ blkid_probe pr; ++ pr = blkid_new_probe(); ++ if (!pr) ++ goto error_close_fd; ++ ++ if (blkid_probe_set_device(pr, fd, wipe_offset, wipe_size) == -1) ++ goto error_free_probe; ++ if (blkid_probe_enable_superblocks(pr, 1) == -1) ++ goto error_free_probe; ++ if (blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_MAGIC) == -1) ++ goto error_free_probe; ++ ++ while (blkid_do_probe(pr) == 0) { ++ if (blkid_do_wipe(pr, 0) == -1) ++ goto error_free_probe; ++ } ++ ++ blkid_free_probe(pr); ++ close(fd); ++ return 1; ++ ++error_free_probe: ++ blkid_free_probe(pr); ++ ++error_close_fd: ++ close(fd); ++ ++error: ++ return 0; ++ ++} ++#else ++static int ++_wipe_signatures (PedDevice *dev, PedSector start, PedSector length) ++{ ++ return 0; ++} ++#endif ++ + static int + do_mkpart (PedDevice** dev, PedDisk** diskp) + { +@@ -840,6 +899,14 @@ do_mkpart (PedDevice** dev, PedDisk** di + if (ped_partition_is_flag_available (part, PED_PARTITION_LBA)) + ped_partition_set_flag (part, PED_PARTITION_LBA, 1); + ++ if (wipesignatures) { ++ if (!_wipe_signatures(*dev, part->geom.start, part->geom.length)) ++ ped_exception_throw ( ++ PED_EXCEPTION_WARNING, ++ PED_EXCEPTION_OK, ++ _("Wiping the superblock signatures has failed.")); ++ } ++ + if (!ped_disk_commit (disk)) + goto error; + +@@ -2196,6 +2263,9 @@ while (1) + case PRETEND_INPUT_TTY: + pretend_input_tty = 1; + break; ++ case WIPESIGNATURES: ++ wipesignatures = 1; ++ break; + default: + wrong = 1; + break; diff --git a/parted.changes b/parted.changes index 35fbdf8..4271e68 100644 --- a/parted.changes +++ b/parted.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed May 18 07:23:08 UTC 2016 - puzel@suse.com + +- implement --wipesignatures option (bsc#943623, fate#319893) + - parted-implement-wipesignatures-option.patch + ------------------------------------------------------------------- Fri Mar 11 11:20:12 UTC 2016 - puzel@suse.com diff --git a/parted.spec b/parted.spec index 7992a3e..4fe4777 100644 --- a/parted.spec +++ b/parted.spec @@ -57,6 +57,7 @@ Patch29: parted-resize-alias-to-resizepart.patch Patch30: libparted-avoid-libdevice-mapper-warnings.patch Patch31: parted-do-not-warn-when-shrinking-in-script-mode.patch Patch32: libparted-Use-read-only-when-probing-devices-on-linu.patch +Patch33: parted-implement-wipesignatures-option.patch Patch100: parted-fatresize-autoconf.patch BuildRequires: check-devel BuildRequires: device-mapper-devel >= 1.02.33 @@ -132,6 +133,7 @@ to develop applications that require these. %patch30 -p1 %patch31 -p1 %patch32 -p1 +%patch33 -p1 %patch100 -p1 %build