diff --git a/.gitignore b/.gitignore index a715348..e9cb6f9 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ /util-linux-2.23.1.tar.xz /util-linux-2.23.2.tar.xz /util-linux-2.24-rc1.tar.xz +/util-linux-2.24.tar.xz diff --git a/2.25-libfdisk-gpt-recovery.patch b/2.25-libfdisk-gpt-recovery.patch new file mode 100644 index 0000000..02863a2 --- /dev/null +++ b/2.25-libfdisk-gpt-recovery.patch @@ -0,0 +1,122 @@ +diff -up util-linux-2.24/libfdisk/src/gpt.c.kzak util-linux-2.24/libfdisk/src/gpt.c +--- util-linux-2.24/libfdisk/src/gpt.c.kzak 2013-10-21 13:03:38.782957983 +0200 ++++ util-linux-2.24/libfdisk/src/gpt.c 2013-10-23 12:16:01.062783977 +0200 +@@ -410,6 +410,46 @@ static int gpt_mknew_header_from_bkp(str + return 0; + } + ++static struct gpt_header *gpt_copy_header(struct fdisk_context *cxt, ++ struct gpt_header *src) ++{ ++ struct gpt_header *res; ++ ++ if (!cxt || !src) ++ return NULL; ++ ++ res = calloc(1, sizeof(*res)); ++ if (!res) { ++ fdisk_warn(cxt, _("failed to allocate GPT header")); ++ return NULL; ++ } ++ ++ res->my_lba = src->alternative_lba; ++ res->alternative_lba = src->my_lba; ++ ++ res->signature = src->signature; ++ res->revision = src->revision; ++ res->size = src->size; ++ res->npartition_entries = src->npartition_entries; ++ res->sizeof_partition_entry = src->sizeof_partition_entry; ++ res->first_usable_lba = src->first_usable_lba; ++ res->last_usable_lba = src->last_usable_lba; ++ ++ memcpy(&res->disk_guid, &src->disk_guid, sizeof(src->disk_guid)); ++ ++ ++ if (res->my_lba == GPT_PRIMARY_PARTITION_TABLE_LBA) ++ res->partition_entry_lba = cpu_to_le64(2); ++ else { ++ uint64_t esz = le32_to_cpu(src->npartition_entries) * sizeof(struct gpt_entry); ++ uint64_t esects = (esz + cxt->sector_size - 1) / cxt->sector_size; ++ ++ res->partition_entry_lba = cpu_to_le64(cxt->total_sectors - 1 - esects); ++ } ++ ++ return res; ++} ++ + /* + * Builds a clean new GPT header (currently under revision 1.0). + * +@@ -776,10 +816,13 @@ static struct gpt_header *gpt_read_heade + else + free(ents); + ++ DBG(LABEL, dbgprint("found valid GPT Header on LBA %ju", lba)); + return header; + invalid: + free(header); + free(ents); ++ ++ DBG(LABEL, dbgprint("read GPT Header on LBA %ju failed", lba)); + return NULL; + } + +@@ -1091,6 +1134,8 @@ static int gpt_probe_label(struct fdisk_ + + gpt = self_label(cxt); + ++ /* TODO: it would be nice to support scenario when GPT headers are OK, ++ * but PMBR is corrupt */ + mbr_type = valid_pmbr(cxt); + if (!mbr_type) + goto failed; +@@ -1102,20 +1147,36 @@ static int gpt_probe_label(struct fdisk_ + gpt->pheader = gpt_read_header(cxt, GPT_PRIMARY_PARTITION_TABLE_LBA, + &gpt->ents); + +- /* +- * TODO: If the primary GPT is corrupt, we must check the last LBA of the +- * device to see if it has a valid GPT Header and point to a valid GPT +- * Partition Entry Array. +- * If it points to a valid GPT Partition Entry Array, then software should +- * restore the primary GPT if allowed by platform policy settings. +- * +- * For now we just abort GPT probing! +- */ +- if (!gpt->pheader || !gpt->ents) ++ if (gpt->pheader) ++ /* primary OK, try backup from alternative LBA */ ++ gpt->bheader = gpt_read_header(cxt, ++ le64_to_cpu(gpt->pheader->alternative_lba), ++ NULL); ++ else ++ /* primary corrupted -- try last LBA */ ++ gpt->bheader = gpt_read_header(cxt, last_lba(cxt), &gpt->ents); ++ ++ if (!gpt->pheader && !gpt->bheader) + goto failed; + +- /* OK, probing passed, now initialize backup header and fdisk variables. */ +- gpt->bheader = gpt_read_header(cxt, last_lba(cxt), NULL); ++ /* primary OK, backup corrupted -- recovery */ ++ if (gpt->pheader && !gpt->bheader) { ++ fdisk_warnx(cxt, _("The backup GPT table is corrupt, but the " ++ "primary appears OK, so that will be used.")); ++ gpt->bheader = gpt_copy_header(cxt, gpt->pheader); ++ if (!gpt->bheader) ++ goto failed; ++ gpt_recompute_crc(gpt->bheader, gpt->ents); ++ ++ /* primary corrupted, backup OK -- recovery */ ++ } else if (!gpt->pheader && gpt->bheader) { ++ fdisk_warnx(cxt, _("The primary GPT table is corrupt, but the " ++ "backup appears OK, so that will be used.")); ++ gpt->pheader = gpt_copy_header(cxt, gpt->bheader); ++ if (!gpt->pheader) ++ goto failed; ++ gpt_recompute_crc(gpt->pheader, gpt->ents); ++ } + + cxt->label->nparts_max = le32_to_cpu(gpt->pheader->npartition_entries); + cxt->label->nparts_cur = partitions_in_use(gpt->pheader, gpt->ents); diff --git a/nologin.8 b/nologin.8 deleted file mode 100644 index 5cb1601..0000000 --- a/nologin.8 +++ /dev/null @@ -1,63 +0,0 @@ -.\" $OpenBSD: nologin.8,v 1.8 1999/06/04 02:45:19 aaron Exp $ -.\" $NetBSD: nologin.8,v 1.3 1995/03/18 14:59:09 cgd Exp $ -.\" -.\" Copyright (c) 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)nologin.8 8.1 (Berkeley) 6/19/93 -.\" -.Dd February 15, 1997 -.Dt NOLOGIN 8 -.Os -.Sh NAME -.Nm nologin -.Nd politely refuse a login -.Sh SYNOPSIS -.Nm nologin -.Sh DESCRIPTION -.Nm -displays a message that an account is not available and -exits non-zero. -It is intended as a replacement shell field for accounts that -have been disabled. -.Pp -If the file -.Pa /etc/nologin.txt -exists, -.Nm -displays its contents to the user instead of the default message. -.Sh SEE ALSO -.Xr login 1 -.Sh HISTORY -The -.Nm -command appeared in -.Bx 4.4 . diff --git a/nologin.c b/nologin.c deleted file mode 100644 index 8a51ba9..0000000 --- a/nologin.c +++ /dev/null @@ -1,58 +0,0 @@ -/* $OpenBSD: nologin.c,v 1.2 1997/04/04 16:51:37 millert Exp $ */ - -/* - * Copyright (c) 1997, Jason Downs. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -/* Distinctly different from _PATH_NOLOGIN. */ -#define _PATH_NOLOGIN_TXT "/etc/nologin.txt" - -#define DEFAULT_MESG "This account is currently not available.\n" - -/*ARGSUSED*/ -int main(argc, argv) - int argc; - char *argv[]; -{ - int nfd, nrd; - char nbuf[128]; - - nfd = open(_PATH_NOLOGIN_TXT, O_RDONLY); - if (nfd < 0) { - write(STDOUT_FILENO, DEFAULT_MESG, strlen(DEFAULT_MESG)); - exit (1); - } - - while ((nrd = read(nfd, nbuf, sizeof(nbuf))) > 0) - write(STDOUT_FILENO, nbuf, nrd); - close (nfd); - - exit (1); -} diff --git a/sources b/sources index 4eef457..d70890c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -cd484c6c03d8c1242cc1eae9ea1f040e util-linux-2.24-rc1.tar.xz +4fac6443427f575fc5f3531a4ad2ca01 util-linux-2.24.tar.xz diff --git a/util-linux.spec b/util-linux.spec index 5a2d7bd..072706c 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -2,12 +2,12 @@ Summary: A collection of basic system utilities Name: util-linux Version: 2.24 -Release: 0.1%{?dist} +Release: 1%{?dist} License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain Group: System Environment/Base URL: http://en.wikipedia.org/wiki/Util-linux -%define upstream_version %{version}-rc1 +%define upstream_version %{version} ### Macros %define cytune_archs %{ix86} alpha %{arm} @@ -33,8 +33,6 @@ Source1: util-linux-login.pamd Source2: util-linux-remote.pamd Source3: util-linux-chsh-chfn.pamd Source4: util-linux-60-raw.rules -Source8: nologin.c -Source9: nologin.8 Source12: util-linux-su.pamd Source13: util-linux-su-l.pamd Source14: util-linux-runuser.pamd @@ -79,6 +77,9 @@ Requires: libmount = %{version}-%{release} # 151635 - makeing /var/log/lastlog Patch0: 2.23-login-lastlog-create.patch +# backport from v2.25: 1022217 - fdisk mishandles GPT corruption +Patch1: 2.25-libfdisk-gpt-recovery.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 @@ -203,7 +204,6 @@ mountinfo, etc) and mount filesystems. %prep %setup -q -n %{name}-%{upstream_version} -cp %{SOURCE8} %{SOURCE9} . for p in %{patches}; do %{__patch} -p1 -F%{_default_patch_fuzz} -i "$p" @@ -241,10 +241,6 @@ export SUID_LDFLAGS="-pie -Wl,-z,relro -Wl,-z,now" # build util-linux make %{?_smp_mflags} -# build nologin -gcc $CFLAGS -o nologin nologin.c - - %check #to run tests use "--with check" %if %{?_with_check:1}%{!?_with_check:0} @@ -265,10 +261,6 @@ chmod 0644 ${RPM_BUILD_ROOT}/var/log/lastlog # install util-linux make install DESTDIR=${RPM_BUILD_ROOT} -# install nologin -install -m 755 nologin ${RPM_BUILD_ROOT}%{_sbindir} -install -m 644 nologin.8 ${RPM_BUILD_ROOT}%{_mandir}/man8 - # raw echo '.so man8/raw.8' > $RPM_BUILD_ROOT%{_mandir}/man8/rawdevices.8 { @@ -339,14 +331,13 @@ for I in /sbin/sfdisk \ done %endif -# we install getopt-*.{bash,tcsh} as doc files +# we install getopt-*.{bash,tcsh} by %doc directive chmod 644 misc-utils/getopt-*.{bash,tcsh} -rm -f ${RPM_BUILD_ROOT}%{_datadir}/getopt/* -rmdir ${RPM_BUILD_ROOT}%{_datadir}/getopt +rm -f ${RPM_BUILD_ROOT}%{_datadir}/doc/util-linux/getopt/* +rmdir ${RPM_BUILD_ROOT}%{_datadir}/doc/util-linux/getopt ln -sf /proc/mounts %{buildroot}/etc/mtab - # remove static libs rm -f $RPM_BUILD_ROOT%{_libdir}/lib{uuid,blkid,mount}.a @@ -823,6 +814,11 @@ fi %{_libdir}/python*/site-packages/libmount/* %changelog +* Wed Oct 23 2013 Karel Zak 2.24-1 +- upgrade to upstream release v2.24 +- remove nologin (merged upstream) +- fix #1022217 - fdisk mishandles GPT corruption + * Fri Sep 27 2013 Karel Zak 2.24-0.1 - upgrade to upstream release v2.24-rc1 - add python3 libmount binding