Accepting request 544142 from Base:System
OBS-URL: https://build.opensuse.org/request/show/544142 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/parted?expand=0&rev=120
This commit is contained in:
commit
f842997667
106
parted-add-ignore-busy-option.patch
Normal file
106
parted-add-ignore-busy-option.patch
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
From: Sebastian Parschauer <sparschauer@suse.de>
|
||||||
|
Date: Mon, 20 Nov 2017 18:01:56 +0100
|
||||||
|
Subject: parted: Add '--ignore-busy' option
|
||||||
|
References: bsc#1058667
|
||||||
|
Patch-mainline: not yet, based on v3 submitted on 2017-11-07
|
||||||
|
|
||||||
|
There are dangerous actions like e.g. shrinking or removing a busy
|
||||||
|
partition which should be possible in script mode but not without
|
||||||
|
using an option to enforce that. This is meant to prevent buggy
|
||||||
|
scripts from doing those actions unintentionally.
|
||||||
|
|
||||||
|
Also add proper printing of the help text for a long option without
|
||||||
|
a short option.
|
||||||
|
|
||||||
|
Suggested-by: Phillip Susi <psusi@ubuntu.com>
|
||||||
|
Signed-off-by: Sebastian Parschauer <sparschauer@suse.de>
|
||||||
|
---
|
||||||
|
doc/C/parted.8 | 3 +++
|
||||||
|
parted/parted.c | 16 ++++++++++++++--
|
||||||
|
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/C/parted.8 b/doc/C/parted.8
|
||||||
|
index e2a24dc..ff01162 100644
|
||||||
|
--- a/doc/C/parted.8
|
||||||
|
+++ b/doc/C/parted.8
|
||||||
|
@@ -30,6 +30,9 @@ never prompts for user intervention
|
||||||
|
.B -v, --version
|
||||||
|
displays the version
|
||||||
|
.TP
|
||||||
|
+.B --ignore-busy
|
||||||
|
+perform the requested action in script mode although a partition is busy
|
||||||
|
+.TP
|
||||||
|
.B --wipesignatures
|
||||||
|
mkpart wipes the superblock signatures from the disk region where it is
|
||||||
|
about to create the partition
|
||||||
|
diff --git a/parted/parted.c b/parted/parted.c
|
||||||
|
index 3d7ec4b..3cc8f77 100644
|
||||||
|
--- a/parted/parted.c
|
||||||
|
+++ b/parted/parted.c
|
||||||
|
@@ -76,7 +76,8 @@ static int MEGABYTE_SECTORS (PedDevice* dev)
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PRETEND_INPUT_TTY = CHAR_MAX + 1,
|
||||||
|
- WIPESIGNATURES = CHAR_MAX + 2,
|
||||||
|
+ IGNORE_BUSY = CHAR_MAX + 2,
|
||||||
|
+ WIPESIGNATURES = CHAR_MAX + 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
@@ -118,6 +119,7 @@ static struct option const options[] = {
|
||||||
|
{"script", 0, NULL, 's'},
|
||||||
|
{"version", 0, NULL, 'v'},
|
||||||
|
{"align", required_argument, NULL, 'a'},
|
||||||
|
+ {"ignore-busy", 0, NULL, IGNORE_BUSY},
|
||||||
|
{"wipesignatures", 0, NULL, WIPESIGNATURES},
|
||||||
|
{"-pretend-input-tty", 0, NULL, PRETEND_INPUT_TTY},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
@@ -130,10 +132,13 @@ static const char *const options_help [][2] = {
|
||||||
|
{"script", N_("never prompts for user intervention")},
|
||||||
|
{"version", N_("displays the version")},
|
||||||
|
{"align=[none|cyl|min|opt]", N_("alignment for new partitions")},
|
||||||
|
+ {"ignore-busy", N_("perform action although partition is busy")},
|
||||||
|
{"wipesignatures", N_("wipe superblock signatures when creating partition")},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
+#define LONGOPT_HELP_START 6 /* index to first long option help */
|
||||||
|
+
|
||||||
|
int opt_script_mode = 0;
|
||||||
|
int pretend_input_tty = 0;
|
||||||
|
int wipesignatures = 0;
|
||||||
|
@@ -141,6 +146,7 @@ int opt_machine_mode = 0;
|
||||||
|
int disk_is_modified = 0;
|
||||||
|
int is_toggle_mode = 0;
|
||||||
|
int alignment = ALIGNMENT_OPTIMAL;
|
||||||
|
+int ignore_busy = 0;
|
||||||
|
|
||||||
|
static const char* number_msg = N_(
|
||||||
|
"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
|
||||||
|
@@ -513,12 +519,17 @@ print_options_help ()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
- for (i=0; options_help [i][0]; i++) {
|
||||||
|
+ for (i=0; i < LONGOPT_HELP_START; i++) {
|
||||||
|
printf (" -%c, --%-25.25s %s\n",
|
||||||
|
options_help [i][0][0],
|
||||||
|
options_help [i][0],
|
||||||
|
_(options_help [i][1]));
|
||||||
|
}
|
||||||
|
+ for (i=LONGOPT_HELP_START; options_help [i][0]; i++) {
|
||||||
|
+ printf (" --%-29.25s %s\n",
|
||||||
|
+ options_help [i][0],
|
||||||
|
+ _(options_help [i][1]));
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
@@ -2244,6 +2255,7 @@ while (1)
|
||||||
|
alignment = XARGMATCH ("--align", optarg,
|
||||||
|
align_args, align_types);
|
||||||
|
break;
|
||||||
|
+ case IGNORE_BUSY: ignore_busy = 1; break;
|
||||||
|
case PRETEND_INPUT_TTY:
|
||||||
|
pretend_input_tty = 1;
|
||||||
|
break;
|
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
parted/parted.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: parted-3.2/parted/parted.c
|
|
||||||
===================================================================
|
|
||||||
--- parted-3.2.orig/parted/parted.c
|
|
||||||
+++ parted-3.2/parted/parted.c
|
|
||||||
@@ -1601,7 +1601,7 @@ do_resizepart (PedDevice** dev, PedDisk*
|
|
||||||
start, end))
|
|
||||||
goto error_destroy_constraint;
|
|
||||||
/* warn when shrinking partition - might lose data */
|
|
||||||
- if (part->geom.end < oldend)
|
|
||||||
+ if ((part->geom.end < oldend) && !opt_script_mode)
|
|
||||||
if (ped_exception_throw (
|
|
||||||
PED_EXCEPTION_WARNING,
|
|
||||||
PED_EXCEPTION_YES_NO,
|
|
130
parted-fix-resizepart-and-rm-command.patch
Normal file
130
parted-fix-resizepart-and-rm-command.patch
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
From: Sebastian Parschauer <sparschauer@suse.de>
|
||||||
|
Date: Tue, 7 Nov 2017 14:09:46 +0100
|
||||||
|
Subject: parted: Fix resizepart and rm command
|
||||||
|
References: bsc#1058667
|
||||||
|
Patch-mainline: not yet, based on v3 submitted on 2017-11-07
|
||||||
|
|
||||||
|
In script mode the resizepart command fails when shrinking and
|
||||||
|
if the partition is busy. Also the warnings printed in this
|
||||||
|
case are only applicable to interactive mode. A similar problem
|
||||||
|
exists with the rm command.
|
||||||
|
So print different warnings in script mode and continue if growing
|
||||||
|
a busy partition. Require the '--ignore-busy' option to be set in
|
||||||
|
order to shrink or remove a busy partition. Shrinking cannot be
|
||||||
|
more dangerous in script mode than removing. So allow shrinking a
|
||||||
|
partition in script mode which is not busy.
|
||||||
|
|
||||||
|
In interactive mode there is a problem if providing the partition
|
||||||
|
number and the end of the partition as arguments to the resizepart
|
||||||
|
command directly with a busy partition. The warning is shown and
|
||||||
|
after continuing anyway parted asks for the partition end although
|
||||||
|
it has already been provided. So count the number of words on
|
||||||
|
command line and warn after processing all of them or after getting
|
||||||
|
the partition number.
|
||||||
|
|
||||||
|
Fixes: 21c58e17c473 ("parted: add resizepart command")
|
||||||
|
Reported-by: Arvin Schnell <aschnell@suse.com>
|
||||||
|
Signed-off-by: Sebastian Parschauer <sparschauer@suse.de>
|
||||||
|
---
|
||||||
|
parted/parted.c | 39 ++++++++++++++++++++++++++++++++-------
|
||||||
|
2 files changed, 36 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/parted/parted.c b/parted/parted.c
|
||||||
|
index 3cc8f77..2e31659 100644
|
||||||
|
--- a/parted/parted.c
|
||||||
|
+++ b/parted/parted.c
|
||||||
|
@@ -228,13 +228,19 @@ _timer_handler (PedTimer* timer, void* context)
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
-_partition_warn_busy (PedPartition* part)
|
||||||
|
+_partition_warn_busy (PedPartition* part, bool dangerous)
|
||||||
|
{
|
||||||
|
char* path;
|
||||||
|
|
||||||
|
if (ped_partition_is_busy (part)) {
|
||||||
|
path = ped_partition_get_path (part);
|
||||||
|
- if (ped_exception_throw (
|
||||||
|
+ if (opt_script_mode && (!dangerous || ignore_busy)) {
|
||||||
|
+ ped_exception_throw (
|
||||||
|
+ PED_EXCEPTION_WARNING,
|
||||||
|
+ PED_EXCEPTION_UNHANDLED,
|
||||||
|
+ _("Partition %s is being used, continuing anyway."),
|
||||||
|
+ path);
|
||||||
|
+ } else if (ped_exception_throw (
|
||||||
|
PED_EXCEPTION_WARNING,
|
||||||
|
PED_EXCEPTION_YES_NO,
|
||||||
|
_("Partition %s is being used. Are you sure you " \
|
||||||
|
@@ -1634,6 +1640,11 @@ do_resizepart (PedDevice** dev, PedDisk** diskp)
|
||||||
|
PedSector start, end, oldend;
|
||||||
|
PedGeometry *range_end = NULL;
|
||||||
|
PedConstraint* constraint;
|
||||||
|
+ int cmdline_words = command_line_get_word_count();
|
||||||
|
+ /* update this if adding/removing arguments to/from this command */
|
||||||
|
+ const int part_idx = 1;
|
||||||
|
+ const int end_idx = 2;
|
||||||
|
+ const bool danger_if_busy = false;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (!disk) {
|
||||||
|
@@ -1650,26 +1661,39 @@ do_resizepart (PedDevice** dev, PedDisk** diskp)
|
||||||
|
|
||||||
|
if (!command_line_get_partition (_("Partition number?"), disk, &part))
|
||||||
|
goto error;
|
||||||
|
- if (!_partition_warn_busy (part))
|
||||||
|
+ /* warn early if the partition end is not provided on cmdline */
|
||||||
|
+ if (cmdline_words <= part_idx && !_partition_warn_busy (part, danger_if_busy))
|
||||||
|
goto error;
|
||||||
|
-
|
||||||
|
start = part->geom.start;
|
||||||
|
end = oldend = part->geom.end;
|
||||||
|
if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, NULL))
|
||||||
|
goto error;
|
||||||
|
+ if (cmdline_words >= end_idx && !_partition_warn_busy (part, danger_if_busy))
|
||||||
|
+ goto error;
|
||||||
|
+
|
||||||
|
/* Do not move start of the partition */
|
||||||
|
constraint = constraint_from_start_end_fixed_start (*dev, start, range_end);
|
||||||
|
if (!ped_disk_set_partition_geom (disk, part, constraint,
|
||||||
|
start, end))
|
||||||
|
goto error_destroy_constraint;
|
||||||
|
/* warn when shrinking partition - might lose data */
|
||||||
|
- if (part->geom.end < oldend)
|
||||||
|
- if (ped_exception_throw (
|
||||||
|
+ if (part->geom.end < oldend) {
|
||||||
|
+ if (opt_script_mode && (!ped_partition_is_busy (part) || ignore_busy)) {
|
||||||
|
+ char *path = ped_partition_get_path (part);
|
||||||
|
+ ped_exception_throw (
|
||||||
|
+ PED_EXCEPTION_WARNING,
|
||||||
|
+ PED_EXCEPTION_UNHANDLED,
|
||||||
|
+ _("Shrinking partition %s, data loss possible."), path);
|
||||||
|
+ free(path);
|
||||||
|
+ } else if (ped_exception_throw (
|
||||||
|
PED_EXCEPTION_WARNING,
|
||||||
|
PED_EXCEPTION_YES_NO,
|
||||||
|
_("Shrinking a partition can cause data loss, " \
|
||||||
|
"are you sure you want to continue?")) != PED_EXCEPTION_YES)
|
||||||
|
+ {
|
||||||
|
goto error_destroy_constraint;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
ped_disk_commit (disk);
|
||||||
|
|
||||||
|
if ((*dev)->type != PED_DEVICE_FILE)
|
||||||
|
@@ -1690,6 +1714,7 @@ static int
|
||||||
|
do_rm (PedDevice** dev, PedDisk** diskp)
|
||||||
|
{
|
||||||
|
PedPartition* part = NULL;
|
||||||
|
+ const bool danger_if_busy = true;
|
||||||
|
|
||||||
|
if (!*diskp)
|
||||||
|
*diskp = ped_disk_new (*dev);
|
||||||
|
@@ -1698,7 +1723,7 @@ do_rm (PedDevice** dev, PedDisk** diskp)
|
||||||
|
|
||||||
|
if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
|
||||||
|
goto error;
|
||||||
|
- if (!_partition_warn_busy (part))
|
||||||
|
+ if (!_partition_warn_busy (part, danger_if_busy))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ped_disk_delete_partition (*diskp, part);
|
@ -1,3 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Nov 21 09:26:23 UTC 2017 - sebastian.parschauer@suse.com
|
||||||
|
|
||||||
|
- Fix the resizepart and rm command (bsc#1058667)
|
||||||
|
- fix asking for the partition end for resizepart in interactive mode
|
||||||
|
when the partition is busy
|
||||||
|
- allow resizepart shrinking and rm of busy partitions in script mode
|
||||||
|
by adding the --ignore-busy option
|
||||||
|
- allow growing busy partitions in script mode by default
|
||||||
|
- print a warning when shrinking a non-busy partition in script mode
|
||||||
|
- fix help text printing of long options without short option
|
||||||
|
- remove: parted-do-not-warn-when-shrinking-in-script-mode.patch
|
||||||
|
- add: parted-add-ignore-busy-option.patch
|
||||||
|
- add: parted-fix-resizepart-and-rm-command.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Nov 13 17:17:40 CET 2017 - sparschauer@suse.de
|
Mon Nov 13 17:17:40 CET 2017 - sparschauer@suse.de
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ Patch28: libparted-device-mapper-uses-512b-sectors.patch
|
|||||||
# Remove following compatibility patch once bnc#931765 is resolved
|
# Remove following compatibility patch once bnc#931765 is resolved
|
||||||
Patch29: parted-resize-alias-to-resizepart.patch
|
Patch29: parted-resize-alias-to-resizepart.patch
|
||||||
Patch30: libparted-avoid-libdevice-mapper-warnings.patch
|
Patch30: libparted-avoid-libdevice-mapper-warnings.patch
|
||||||
Patch31: parted-do-not-warn-when-shrinking-in-script-mode.patch
|
# Patch31 dropped for bsc#1058667
|
||||||
Patch32: libparted-Use-read-only-when-probing-devices-on-linu.patch
|
Patch32: libparted-Use-read-only-when-probing-devices-on-linu.patch
|
||||||
Patch33: libparted-open-the-device-RO-and-lazily-switch-to-RW.patch
|
Patch33: libparted-open-the-device-RO-and-lazily-switch-to-RW.patch
|
||||||
Patch34: parted-implement-wipesignatures-option.patch
|
Patch34: parted-implement-wipesignatures-option.patch
|
||||||
@ -83,6 +83,8 @@ Patch54: libparted-fix-udev-cookie-leak.patch
|
|||||||
Patch55: libparted-Add-support-for-NVDIMM-devices.patch
|
Patch55: libparted-Add-support-for-NVDIMM-devices.patch
|
||||||
Patch56: libparted-fix-NVDIMM-partition-naming.patch
|
Patch56: libparted-fix-NVDIMM-partition-naming.patch
|
||||||
Patch57: parted-escape-printed-device-path.patch
|
Patch57: parted-escape-printed-device-path.patch
|
||||||
|
Patch58: parted-add-ignore-busy-option.patch
|
||||||
|
Patch59: parted-fix-resizepart-and-rm-command.patch
|
||||||
# Fatresize
|
# Fatresize
|
||||||
Patch100: parted-fatresize-autoconf.patch
|
Patch100: parted-fatresize-autoconf.patch
|
||||||
# Upstream tests patches
|
# Upstream tests patches
|
||||||
@ -163,7 +165,6 @@ to develop applications that require these.
|
|||||||
%patch28 -p1
|
%patch28 -p1
|
||||||
%patch29 -p1
|
%patch29 -p1
|
||||||
%patch30 -p1
|
%patch30 -p1
|
||||||
%patch31 -p1
|
|
||||||
%patch32 -p1
|
%patch32 -p1
|
||||||
%patch33 -p1
|
%patch33 -p1
|
||||||
%patch34 -p1
|
%patch34 -p1
|
||||||
@ -190,6 +191,8 @@ to develop applications that require these.
|
|||||||
%patch55 -p1
|
%patch55 -p1
|
||||||
%patch56 -p1
|
%patch56 -p1
|
||||||
%patch57 -p1
|
%patch57 -p1
|
||||||
|
%patch58 -p1
|
||||||
|
%patch59 -p1
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
%patch150 -p1
|
%patch150 -p1
|
||||||
%patch151 -p1
|
%patch151 -p1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user