kzak pushed to util-linux (f22). "2.26.1-1: upgrade and fix sfdisk bugs"

notifications at fedoraproject.org notifications at fedoraproject.org
Mon Apr 13 16:04:24 UTC 2015


>From 3fe05ecbfc63f39328bbd2542198e74365879bdb Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak at redhat.com>
Date: Mon, 13 Apr 2015 18:02:32 +0200
Subject: 2.26.1-1: upgrade and fix sfdisk bugs


diff --git a/.gitignore b/.gitignore
index 83370dc..4f7aeb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@
 /util-linux-2.26-rc1.tar.xz
 /util-linux-2.26-rc2.tar.xz
 /util-linux-2.26.tar.xz
+/util-linux-2.26.1.tar.xz
diff --git a/2.27-libfdisk-dos-retain-existing-boot-flag-when-resizing.patch b/2.27-libfdisk-dos-retain-existing-boot-flag-when-resizing.patch
new file mode 100644
index 0000000..d15014d
--- /dev/null
+++ b/2.27-libfdisk-dos-retain-existing-boot-flag-when-resizing.patch
@@ -0,0 +1,62 @@
+From 376484140cb7ef117616ac2880bd8ec18381b18f Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak at redhat.com>
+Date: Mon, 13 Apr 2015 10:29:00 +0200
+Subject: [PATCH 2/5] libfdisk: (dos)  retain existing boot flag when resizing
+ a partition
+
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1210912
+Signed-off-by: Karel Zak <kzak at redhat.com>
+Co-Author:  awilliam at redhat.com
+---
+ libfdisk/src/dos.c       | 8 +++++---
+ libfdisk/src/partition.c | 3 +--
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
+index dce9829..6468071 100644
+--- a/libfdisk/src/dos.c
++++ b/libfdisk/src/dos.c
+@@ -1221,7 +1221,7 @@ static int add_partition(struct fdisk_context *cxt, size_t n,
+ 		}
+ 	}
+ 
+-	set_partition(cxt, n, 0, start, stop, sys, pa && pa->boot == 1 ? 1 : 0);
++	set_partition(cxt, n, 0, start, stop, sys, fdisk_partition_is_bootable(pa));
+ 	if (n > 4) {
+ 		struct pte *pe = self_pte(cxt, n);
+ 		set_partition(cxt, n - 1, 1, pe->offset, stop,
+@@ -1963,13 +1963,15 @@ static int dos_set_partition(struct fdisk_context *cxt, size_t n,
+ 
+ 		set_partition(cxt, n, 0, start, start + size - 1,
+ 				pa->type  ? pa->type->code : p->sys_ind,
+-				pa->boot == 1);
++				FDISK_IS_UNDEF(pa->boot) ?
++					p->boot_ind == ACTIVE_FLAG :
++					fdisk_partition_is_bootable(pa));
+ 	} else {
+ 		DBG(LABEL, ul_debug("DOS: keep size, modify properties"));
+ 		if (pa->type)
+ 			p->sys_ind = pa->type->code;
+ 		if (!FDISK_IS_UNDEF(pa->boot))
+-			p->boot_ind = pa->boot == 1 ? ACTIVE_FLAG : 0;
++			p->boot_ind = fdisk_partition_is_bootable(pa) ? ACTIVE_FLAG : 0;
+ 	}
+ 
+ 	partition_set_changed(cxt, n, 1);
+diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c
+index 03c0eb5..a0b9ca5 100644
+--- a/libfdisk/src/partition.c
++++ b/libfdisk/src/partition.c
+@@ -757,8 +757,7 @@ int fdisk_partition_to_string(struct fdisk_partition *pa,
+ 		}
+ 		break;
+ 	case FDISK_FIELD_BOOT:
+-		if (fdisk_partition_is_bootable(pa))
+-			rc = asprintf(&p, "%c", pa->boot ? '*' : ' ');
++		p = fdisk_partition_is_bootable(pa) ? strdup("*") : NULL;
+ 		break;
+ 	case FDISK_FIELD_START:
+ 		if (fdisk_partition_has_start(pa)) {
+-- 
+2.1.0
+
diff --git a/2.27-libfdisk-fix-symbols-versioning-script.patch b/2.27-libfdisk-fix-symbols-versioning-script.patch
new file mode 100644
index 0000000..12f5ef1
--- /dev/null
+++ b/2.27-libfdisk-fix-symbols-versioning-script.patch
@@ -0,0 +1,41 @@
+From 6ece2f94849d5c61920d435804fb72b59503686f Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak at redhat.com>
+Date: Wed, 25 Mar 2015 11:08:22 +0100
+Subject: [PATCH 1/5] libfdisk: fix symbols versioning script
+
+Really stupid copy & past mistake. The libfdisk symbols should not be
+prefixed by MOUNT_ suffix.
+
+This change makes binaries linked with libfdisk 2.26 incompatible with
+new libfdisk. Fortunately, 2.26 has been the first release and very
+probably the library has been used for util-linux fdisks only.
+
+Signed-off-by: Karel Zak <kzak at redhat.com>
+---
+ libfdisk/src/libfdisk.sym | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
+index 8364fe7..541b247 100644
+--- a/libfdisk/src/libfdisk.sym
++++ b/libfdisk/src/libfdisk.sym
+@@ -1,11 +1,12 @@
+ /*
+  * The symbol versioning ensures that a new application requiring symbol foo;
+- * can't run with old libblkid.so not providing foo;
+- * version info can't enforce this since we never change the SONAME.
++ * can't run with old library.so not providing foo.
++
++ * Version info can't enforce this since we never change the SONAME.
+  *
+- * Copyright (C) 2014 Karel Zak <kzak at redhat.com>
++ * Copyright (C) 2014-2015 Karel Zak <kzak at redhat.com>
+  */
+-MOUNT_2.26 {
++FDISK_2.26 {
+ global:
+ 	fdisk_add_partition;
+ 	fdisk_align_lba;
+-- 
+2.1.0
+
diff --git a/2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch b/2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
new file mode 100644
index 0000000..0da79a9
--- /dev/null
+++ b/2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
@@ -0,0 +1,357 @@
+From 4bcc9fdca681b48c54954924608b8c337d61fbad Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak at redhat.com>
+Date: Mon, 13 Apr 2015 13:40:25 +0200
+Subject: [PATCH 4/5] libfdisk: support bootbits protection from (p)MBR
+
+Signed-off-by: Karel Zak <kzak at redhat.com>
+---
+ include/pt-mbr.h                    |  1 +
+ libfdisk/docs/libfdisk-sections.txt |  6 ++-
+ libfdisk/src/context.c              | 33 ++++++++++++++++-
+ libfdisk/src/dos.c                  |  5 ++-
+ libfdisk/src/fdiskP.h               |  4 +-
+ libfdisk/src/gpt.c                  |  6 ++-
+ libfdisk/src/libfdisk.h.in          |  2 +
+ libfdisk/src/libfdisk.sym           |  5 +++
+ libfdisk/src/sgi.c                  |  2 +-
+ libfdisk/src/sun.c                  |  2 +-
+ libfdisk/src/utils.c                | 73 ++++++++++++++++++++++++++-----------
+ 11 files changed, 109 insertions(+), 30 deletions(-)
+
+diff --git a/include/pt-mbr.h b/include/pt-mbr.h
+index 1279e3c..6957b95 100644
+--- a/include/pt-mbr.h
++++ b/include/pt-mbr.h
+@@ -11,6 +11,7 @@ struct dos_partition {
+ } __attribute__((packed));
+ 
+ #define MBR_PT_OFFSET		0x1be
++#define MBR_PT_BOOTBITS_SIZE	440
+ 
+ static inline struct dos_partition *mbr_get_partition(unsigned char *mbr, int i)
+ {
+diff --git a/libfdisk/docs/libfdisk-sections.txt b/libfdisk/docs/libfdisk-sections.txt
+index 676d500..2d5cd92 100644
+--- a/libfdisk/docs/libfdisk-sections.txt
++++ b/libfdisk/docs/libfdisk-sections.txt
+@@ -279,6 +279,7 @@ fdisk_unref_table
+ fdisk_context
+ fdisk_assign_device
+ fdisk_deassign_device
++fdisk_enable_bootbits_protection
+ fdisk_enable_details
+ fdisk_enable_listonly
+ fdisk_get_alignment_offset
+@@ -297,22 +298,23 @@ fdisk_get_parent
+ fdisk_get_physector_size
+ fdisk_get_sector_size
+ fdisk_get_size_unit
+-FDISK_PLURAL
+-FDISK_SINGULAR
+ fdisk_get_unit
+ fdisk_get_units_per_sector
+ fdisk_has_label
++fdisk_has_protected_bootbits
+ fdisk_is_details
+ fdisk_is_labeltype
+ fdisk_is_listonly
+ fdisk_is_readonly
+ fdisk_new_context
+ fdisk_new_nested_context
++FDISK_PLURAL
+ fdisk_ref_context
+ fdisk_set_first_lba
+ fdisk_set_last_lba
+ fdisk_set_size_unit
+ fdisk_set_unit
++FDISK_SINGULAR
+ fdisk_unref_context
+ fdisk_use_cylinders
+ </SECTION>
+diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c
+index 84867b0..efc961c 100644
+--- a/libfdisk/src/context.c
++++ b/libfdisk/src/context.c
+@@ -94,12 +94,13 @@ static int init_nested_from_parent(struct fdisk_context *cxt, int isnew)
+ 	cxt->user_log_sector =	parent->user_log_sector;
+ 	cxt->user_pyh_sector =  parent->user_pyh_sector;
+ 
+-	/* parent <--> nested independent setting, initialize for new nested 
++	/* parent <--> nested independent setting, initialize for new nested
+ 	 * contexts only */
+ 	if (isnew) {
+ 		cxt->listonly =	parent->listonly;
+ 		cxt->display_details =	parent->display_details;
+ 		cxt->display_in_cyl_units = parent->display_in_cyl_units;
++		cxt->protect_bootbits = parent->protect_bootbits;
+ 	}
+ 
+ 	free(cxt->dev_path);
+@@ -304,6 +305,36 @@ int fdisk_has_label(struct fdisk_context *cxt)
+ }
+ 
+ /**
++ * fdisk_has_protected_bootbits:
++ * @cxt: fdisk context
++ *
++ * Returns: return 1 if boot bits protection enabled.
++ */
++int fdisk_has_protected_bootbits(struct fdisk_context *cxt)
++{
++	return cxt && cxt->protect_bootbits;
++}
++
++/**
++ * fdisk_enable_bootbits_protection:
++ * @cxt: fdisk context
++ * @enable: 1 or 0
++ *
++ * The library zeroizes all the first sector when create a new disk label by
++ * default.  This function allows to control this behavior. For now it's
++ * supported for MBR and GPT.
++ *
++ * Returns: 0 on success, < 0 on error.
++ */
++int fdisk_enable_bootbits_protection(struct fdisk_context *cxt, int enable)
++{
++	if (!cxt)
++		return -EINVAL;
++	cxt->protect_bootbits = enable ? 1 : 0;
++	return 0;
++}
++
++/**
+  * fdisk_get_npartitions:
+  * @cxt: context
+  *
+diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
+index 6468071..f2308e3 100644
+--- a/libfdisk/src/dos.c
++++ b/libfdisk/src/dos.c
+@@ -659,7 +659,10 @@ static int dos_create_disklabel(struct fdisk_context *cxt)
+ 	if (!has_id)
+ 		random_get_bytes(&id, sizeof(id));
+ 
+-	rc = fdisk_init_firstsector_buffer(cxt);
++	if (fdisk_has_protected_bootbits(cxt))
++		rc = fdisk_init_firstsector_buffer(cxt, 0, MBR_PT_BOOTBITS_SIZE);
++	else
++		rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
+ 	if (rc)
+ 		return rc;
+ 	dos_init(cxt);
+diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h
+index dc561f3..0ca498d 100644
+--- a/libfdisk/src/fdiskP.h
++++ b/libfdisk/src/fdiskP.h
+@@ -350,6 +350,7 @@ struct fdisk_context {
+ 	unsigned int readonly : 1,		/* don't write to the device */
+ 		     display_in_cyl_units : 1,	/* for obscure labels */
+ 		     display_details : 1,	/* expert display mode */
++		     protect_bootbits : 1,	/* don't zeroize fll irst sector */
+ 		     listonly : 1;		/* list partition, nothing else */
+ 
+ 	int sizeunit;				/* SIZE fields, FDISK_SIZEUNIT_* */
+@@ -402,7 +403,8 @@ extern int fdisk_apply_user_device_properties(struct fdisk_context *cxt);
+ extern void fdisk_zeroize_device_properties(struct fdisk_context *cxt);
+ 
+ /* utils.c */
+-extern int fdisk_init_firstsector_buffer(struct fdisk_context *cxt);
++extern int fdisk_init_firstsector_buffer(struct fdisk_context *cxt,
++			unsigned int protect_off, unsigned int protect_size);
+ extern int fdisk_read_firstsector(struct fdisk_context *cxt);
+ extern char *fdisk_partname(const char *dev, size_t partno);
+ 
+diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
+index 61b0a32..22e2d16 100644
+--- a/libfdisk/src/gpt.c
++++ b/libfdisk/src/gpt.c
+@@ -27,6 +27,7 @@
+ #include "bitops.h"
+ #include "strutils.h"
+ #include "all-io.h"
++#include "pt-mbr.h"
+ 
+ /**
+  * SECTION: gpt
+@@ -406,7 +407,10 @@ static int gpt_mknew_pmbr(struct fdisk_context *cxt)
+ 	if (!cxt || !cxt->firstsector)
+ 		return -ENOSYS;
+ 
+-	rc = fdisk_init_firstsector_buffer(cxt);
++	if (fdisk_has_protected_bootbits(cxt))
++		rc = fdisk_init_firstsector_buffer(cxt, 0, MBR_PT_BOOTBITS_SIZE);
++	else
++		rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
+ 	if (rc)
+ 		return rc;
+ 
+diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
+index 3aeef1e..78c0728 100644
+--- a/libfdisk/src/libfdisk.h.in
++++ b/libfdisk/src/libfdisk.h.in
+@@ -211,6 +211,8 @@ enum {
+ int fdisk_set_size_unit(struct fdisk_context *cxt, int unit);
+ int fdisk_get_size_unit(struct fdisk_context *cxt);
+ 
++int fdisk_has_protected_bootbits(struct fdisk_context *cxt);
++int fdisk_enable_bootbits_protection(struct fdisk_context *cxt, int enable);
+ 
+ /* parttype.c */
+ struct fdisk_parttype *fdisk_new_parttype(void);
+diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
+index 541b247..9f720ff 100644
+--- a/libfdisk/src/libfdisk.sym
++++ b/libfdisk/src/libfdisk.sym
+@@ -239,3 +239,8 @@ global:
+ local:
+ 	*;
+ };
++
++FDISK_2.27 {
++	fdisk_enable_bootbits_protection;
++	fdisk_has_protected_bootbits;
++} FDISK_2.26;
+diff --git a/libfdisk/src/sgi.c b/libfdisk/src/sgi.c
+index cd4cedf..7cc68b5 100644
+--- a/libfdisk/src/sgi.c
++++ b/libfdisk/src/sgi.c
+@@ -965,7 +965,7 @@ static int sgi_create_disklabel(struct fdisk_context *cxt)
+ 		}
+ 	}
+ #endif
+-	rc = fdisk_init_firstsector_buffer(cxt);
++	rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
+ 	if (rc)
+ 		return rc;
+ 
+diff --git a/libfdisk/src/sun.c b/libfdisk/src/sun.c
+index d99c39f..27e3bdd 100644
+--- a/libfdisk/src/sun.c
++++ b/libfdisk/src/sun.c
+@@ -209,7 +209,7 @@ static int sun_create_disklabel(struct fdisk_context *cxt)
+ 	assert(fdisk_is_label(cxt, SUN));
+ 
+ 	/* map first sector to header */
+-	rc = fdisk_init_firstsector_buffer(cxt);
++	rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
+ 	if (rc)
+ 		return rc;
+ 
+diff --git a/libfdisk/src/utils.c b/libfdisk/src/utils.c
+index 482a306..cc470d9 100644
+--- a/libfdisk/src/utils.c
++++ b/libfdisk/src/utils.c
+@@ -10,14 +10,49 @@
+  * @short_description: misc fdisk functions
+  */
+ 
++static int read_from_device(struct fdisk_context *cxt,
++		unsigned char *buf,
++		uintmax_t start, size_t size)
++{
++	ssize_t r;
++
++	assert(cxt);
++
++	DBG(CXT, ul_debugobj(cxt, "reading: offset=%ju, size=%zu",
++				start, size));
++
++	r = lseek(cxt->dev_fd, start, SEEK_SET);
++	if (r == -1)
++	{
++		DBG(CXT, ul_debugobj(cxt, "failed to seek to offset %ju: %m", start));
++		return -errno;
++	}
++
++	r = read(cxt->dev_fd, buf, size);
++	if (r < 0 || r != size) {
++		if (!errno)
++			errno = EINVAL;	/* probably too small file/device */
++		DBG(CXT, ul_debugobj(cxt, "failed to read %zu from offset %ju: %m",
++				size, start));
++		return -errno;
++	}
++
++	return 0;
++}
++
++
+ /*
+  * Zeros in-memory first sector buffer
+  */
+-int fdisk_init_firstsector_buffer(struct fdisk_context *cxt)
++int fdisk_init_firstsector_buffer(struct fdisk_context *cxt,
++				  unsigned int protect_off,
++				  unsigned int protect_size)
+ {
+ 	if (!cxt)
+ 		return -EINVAL;
+ 
++	assert(protect_off + protect_size <= cxt->sector_size);
++
+ 	if (!cxt->firstsector || cxt->firstsector_bufsz != cxt->sector_size) {
+ 		/* Let's allocate a new buffer if no allocated yet, or the
+ 		 * current buffer has incorrect size */
+@@ -36,43 +71,37 @@ int fdisk_init_firstsector_buffer(struct fdisk_context *cxt)
+ 
+ 	DBG(CXT, ul_debugobj(cxt, "zeroize in-memory first sector buffer"));
+ 	memset(cxt->firstsector, 0, cxt->firstsector_bufsz);
++
++	if (protect_size) {
++		/*
++		 * It would be possible to reuse data from cxt->firstsector
++		 * (call memset() for non-protected area only) and avoid one
++		 * read() from the device, but it seems like a too fragile
++		 * solution as we have no clue about stuff in the buffer --
++		 * maybe it was already modified. Let's re-read from the device
++		 * to be sure.			-- kzak 13-Apr-2015
++		 */
++		DBG(CXT, ul_debugobj(cxt, "first sector protection enabled -- re-reading"));
++		read_from_device(cxt, cxt->firstsector, protect_off, protect_size);
++	}
+ 	return 0;
+ }
+ 
+ int fdisk_read_firstsector(struct fdisk_context *cxt)
+ {
+-	ssize_t r;
+ 	int rc;
+ 
+ 	assert(cxt);
+ 	assert(cxt->sector_size);
+ 
+-	rc = fdisk_init_firstsector_buffer(cxt);
++	rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
+ 	if (rc)
+ 		return rc;
+ 
+ 	assert(cxt->sector_size == cxt->firstsector_bufsz);
+ 
+-	DBG(CXT, ul_debugobj(cxt, "reading first sector "
+-				"buffer [sector_size=%lu]", cxt->sector_size));
+-
+-	r = lseek(cxt->dev_fd, 0, SEEK_SET);
+-	if (r == -1)
+-	{
+-		DBG(CXT, ul_debugobj(cxt, "failed to seek to first sector %m"));
+-		return -errno;
+-	}
+-
+-	r = read(cxt->dev_fd, cxt->firstsector, cxt->sector_size);
+ 
+-	if (r != cxt->sector_size) {
+-		if (!errno)
+-			errno = EINVAL;	/* probably too small file/device */
+-		DBG(CXT, ul_debugobj(cxt, "failed to read first sector %m"));
+-		return -errno;
+-	}
+-
+-	return 0;
++	return  read_from_device(cxt, cxt->firstsector, 0, cxt->sector_size);
+ }
+ 
+ /**
+-- 
+2.1.0
+
diff --git a/2.27-sfdisk-enable-bootbits-protection.patch b/2.27-sfdisk-enable-bootbits-protection.patch
new file mode 100644
index 0000000..ddf7ae4
--- /dev/null
+++ b/2.27-sfdisk-enable-bootbits-protection.patch
@@ -0,0 +1,26 @@
+From 67414f247ef7a3177c1349de7e18fbfe7ad5f904 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak at redhat.com>
+Date: Mon, 13 Apr 2015 13:41:10 +0200
+Subject: [PATCH 5/5] sfdisk: enable bootbits protection
+
+Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1210428
+Signed-off-by: Karel Zak <kzak at redhat.com>
+---
+ disk-utils/sfdisk.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
+index 8846df8..dcdae33 100644
+--- a/disk-utils/sfdisk.c
++++ b/disk-utils/sfdisk.c
+@@ -190,6 +190,7 @@ static void sfdisk_init(struct sfdisk *sf)
+ 	if (!sf->cxt)
+ 		err(EXIT_FAILURE, _("failed to allocate libfdisk context"));
+ 	fdisk_set_ask(sf->cxt, ask_callback, (void *) sf);
++	fdisk_enable_bootbits_protection(sf->cxt, 1);
+ 
+ 	if (sf->label_nested) {
+ 		struct fdisk_context *x = fdisk_new_nested_context(sf->cxt,
+-- 
+2.1.0
+
diff --git a/2.27-sfdisk-improve-N-warnings.patch b/2.27-sfdisk-improve-N-warnings.patch
new file mode 100644
index 0000000..a628dff
--- /dev/null
+++ b/2.27-sfdisk-improve-N-warnings.patch
@@ -0,0 +1,62 @@
+From 3275c1ac6d28c2257eb031277510bc9da99deedd Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak at redhat.com>
+Date: Mon, 13 Apr 2015 12:08:50 +0200
+Subject: [PATCH 3/5] sfdisk: improve -N warnings
+
+Signed-off-by: Karel Zak <kzak at redhat.com>
+---
+ disk-utils/sfdisk.8 | 9 ++++++++-
+ disk-utils/sfdisk.c | 9 +++++++--
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/disk-utils/sfdisk.8 b/disk-utils/sfdisk.8
+index 66a8f99..0d63b6b 100644
+--- a/disk-utils/sfdisk.8
++++ b/disk-utils/sfdisk.8
+@@ -57,7 +57,14 @@ input format.  If standard input is a terminal, then \fBsfdisk\fR starts an
+ interactive session.
+ .sp
+ If the option \fB\-N\fR is specified, then the changes are applied to
+-the partition addressed by \fIpartition-number\fR.
++the partition addressed by \fIpartition-number\fR. The unspecified fields
++of the partition are not modified.
++.sp
++Note that it's possible to address unused partition by \fB\-N\fR. For example
++MBR always contains 4 partitions, but the number of the used partitions may be
++smaller.  In this case sfdisk follows the default values from the partition
++table and it does not use built-in defaults for the unused partition specified
++by \fB\-N\fR. See also \fB\---append\fR.
+ .TP
+ .BR \-a , " \-\-activate \fIdevice\fR [" \fIpartition-number\fR...]
+ Switch on the bootable flag.  If no \fIpartition-number\fR is specified,
+diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
+index 2e89d94..8846df8 100644
+--- a/disk-utils/sfdisk.c
++++ b/disk-utils/sfdisk.c
+@@ -1109,16 +1109,21 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
+ 	 */
+ 	if (partno >= 0) {
+ 		size_t n;
++
+ 		if (!fdisk_has_label(sf->cxt))
+ 			errx(EXIT_FAILURE, _("%s: cannot modify partition %d: "
+ 					     "no partition table was found"),
+-					devname, partno);
++					devname, partno + 1);
+ 		n = fdisk_get_npartitions(sf->cxt);
+ 		if ((size_t) partno > n)
+ 			errx(EXIT_FAILURE, _("%s: cannot modify partition %d: "
+ 					     "partition table contains only %zu "
+ 					     "partitions"),
+-					devname, partno, n);
++					devname, partno + 1, n);
++
++		if (!fdisk_is_partition_used(sf->cxt, partno))
++			fdisk_warnx(sf->cxt, _("warning: %s: partition %d is not defined yet"),
++					devname, partno + 1);
+ 		created = 1;
+ 		next_partno = partno;
+ 	}
+-- 
+2.1.0
+
diff --git a/sources b/sources
index 79b1640..1cde402 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-912c550a4e5c47c0ce9abd0733fa9a64  util-linux-2.26.tar.xz
+2308850946766677f3fabe0685e85de8  util-linux-2.26.1.tar.xz
diff --git a/util-linux.spec b/util-linux.spec
index 6faec3f..6c26d6b 100644
--- a/util-linux.spec
+++ b/util-linux.spec
@@ -1,7 +1,7 @@
 ### Header
 Summary: A collection of basic system utilities
 Name: util-linux
-Version: 2.26
+Version: 2.26.1
 Release: 1%{?dist}
 License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
 Group: System Environment/Base
@@ -27,7 +27,7 @@ BuildRequires: libcap-ng-devel
 BuildRequires: python3-devel
 
 ### Sources
-Source0: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.25/util-linux-%{upstream_version}.tar.xz
+Source0: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.26/util-linux-%{upstream_version}.tar.xz
 Source1: util-linux-login.pamd
 Source2: util-linux-remote.pamd
 Source3: util-linux-chsh-chfn.pamd
@@ -78,6 +78,13 @@ Requires: libfdisk = %{version}-%{release}
 # 151635 - makeing /var/log/lastlog
 Patch0: 2.23-login-lastlog-create.patch
 
+# upstream v2.27 / v2.26.2 backports (#1210428 and #1210912)
+Patch1: 2.27-libfdisk-fix-symbols-versioning-script.patch
+Patch2: 2.27-libfdisk-dos-retain-existing-boot-flag-when-resizing.patch
+Patch3: 2.27-sfdisk-improve-N-warnings.patch
+Patch4: 2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
+Patch5: 2.27-sfdisk-enable-bootbits-protection.patch
+
 %description
 The util-linux package contains a large variety of low-level system
 utilities that are necessary for a Linux system to function. Among
@@ -879,6 +886,12 @@ exit 0
 %{_libdir}/python*/site-packages/libmount/*
 
 %changelog
+* Mon Apr 13 2015 Karel Zak <kzak at redhat.com> 2.26.1-1
+- upgrade to v2.26.1
+  ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.26/v2.26.1-ReleaseNotes
+- fix #1210912 - sfdisk 2.26 does not retain existing boot flag when resizing a partition
+- fix #1210428 - sfdisk 2.26 destroys existing boot sector when editing disk label
+
 * Thu Feb 19 2015 Karel Zak <kzak at redhat.com> 2.26-1
 - upgrade to stable release 2.26
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/util-linux.git/commit/?h=f22&id=3fe05ecbfc63f39328bbd2542198e74365879bdb


More information about the scm-commits mailing list