From 7a5a401d6bd1c458d497fbcf96b4fee52ab4a05c35ae8285332922be12329f15 Mon Sep 17 00:00:00 2001 From: Petr Uzel Date: Fri, 24 Feb 2012 10:56:25 +0000 Subject: [PATCH] Accepting request 106788 from home:puzel:branches:Base:System update to 2.21-rc2 OBS-URL: https://build.opensuse.org/request/show/106788 OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=119 --- adjtimex-1.28.tar.bz2 | 3 - adjtimex_1.29.orig.tar.gz | 3 + build-sys-fix-building-of-wall.patch | 24 + cytune-fix-manpage-formatting.patch | 31 + fdisk-tinfo.patch | 6 +- fix-ac-init.patch | 12 + ...se-FS-blacklist-for-non-all-mode-too.patch | 94 - ...ir-to-parent-for-restricted-user-umo.patch | 99 -- ...-tailing-slash-in-netfs-source-paths.patch | 218 --- ...ux-2.12r-fdisk_remove_bogus_warnings.patch | 10 +- util-linux-2.17.1-mount_losetup_crypto.patch | 1570 ----------------- util-linux-2.20.1.tar.bz2 | 3 - util-linux-2.21-rc2.tar.bz2 | 3 + ...fix-printing-of-multibyte-characters.patch | 52 - util-linux-rpmlintrc | 3 + util-linux.changes | 60 + util-linux.spec | 102 +- 17 files changed, 197 insertions(+), 2096 deletions(-) delete mode 100644 adjtimex-1.28.tar.bz2 create mode 100644 adjtimex_1.29.orig.tar.gz create mode 100644 build-sys-fix-building-of-wall.patch create mode 100644 cytune-fix-manpage-formatting.patch create mode 100644 fix-ac-init.patch delete mode 100644 fsck-use-FS-blacklist-for-non-all-mode-too.patch delete mode 100644 libmount-fix-chdir-to-parent-for-restricted-user-umo.patch delete mode 100644 libmount-ignore-tailing-slash-in-netfs-source-paths.patch delete mode 100644 util-linux-2.17.1-mount_losetup_crypto.patch delete mode 100644 util-linux-2.20.1.tar.bz2 create mode 100644 util-linux-2.21-rc2.tar.bz2 delete mode 100644 util-linux-dmesg-fix-printing-of-multibyte-characters.patch diff --git a/adjtimex-1.28.tar.bz2 b/adjtimex-1.28.tar.bz2 deleted file mode 100644 index 6347052..0000000 --- a/adjtimex-1.28.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:527a20975cbcffb39ab122867c4a9438cf09e7d1e01a06eaa2f340de282a4c95 -size 75184 diff --git a/adjtimex_1.29.orig.tar.gz b/adjtimex_1.29.orig.tar.gz new file mode 100644 index 0000000..cf887f4 --- /dev/null +++ b/adjtimex_1.29.orig.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04b9e8b66e77276ed07e78de89af37fd1aa12725923de853480827c4fafd176a +size 85551 diff --git a/build-sys-fix-building-of-wall.patch b/build-sys-fix-building-of-wall.patch new file mode 100644 index 0000000..2821c02 --- /dev/null +++ b/build-sys-fix-building-of-wall.patch @@ -0,0 +1,24 @@ +From d47835cdd49af3fa13015eefbf3422b2faee8439 Mon Sep 17 00:00:00 2001 +From: Petr Uzel +Date: Tue, 21 Feb 2012 15:59:29 +0100 +Subject: [PATCH] build-sys: fix building of wall + + +Signed-off-by: Petr Uzel +--- + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Index: util-linux-2.21-rc2/configure.ac +=================================================================== +--- util-linux-2.21-rc2.orig/configure.ac ++++ util-linux-2.21-rc2/configure.ac +@@ -1035,7 +1035,7 @@ AC_ARG_ENABLE([wall], + AS_HELP_STRING([--disable-wall], [do not build wall]), + [], enable_wall=yes + ) +-UL_BUILD_INIT([wasll]) ++UL_BUILD_INIT([wall]) + AM_CONDITIONAL(BUILD_WALL, test "x$build_wall" = xyes) + + diff --git a/cytune-fix-manpage-formatting.patch b/cytune-fix-manpage-formatting.patch new file mode 100644 index 0000000..b626ebd --- /dev/null +++ b/cytune-fix-manpage-formatting.patch @@ -0,0 +1,31 @@ +From 5ae8681e48c67a02baaa67c61801047cc3da1477 Mon Sep 17 00:00:00 2001 +From: Petr Uzel +Date: Tue, 21 Feb 2012 16:18:55 +0100 +Subject: [PATCH] cytune.8: fix formatting + +W: manual-page-warning /usr/share/man/man8/cytune.8.gz 178: warning: +macro `chars',' not defined (possibly missing space after `ch') + +Signed-off-by: Petr Uzel +--- + sys-utils/cytune.8 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sys-utils/cytune.8 b/sys-utils/cytune.8 +index 1c4de3e..fd82391 100644 +--- a/sys-utils/cytune.8 ++++ b/sys-utils/cytune.8 +@@ -174,8 +174,8 @@ seconds. + .SH BUGS + If you run two copies of + .B cytune +-at the same time to report statistics about the same port, the 'ints', +-'chars', and 'max' value will be reset and not reported correctly. ++at the same time to report statistics about the same port, the 'ints', 'chars', ++and 'max' value will be reset and not reported correctly. + .B cytune + should prevent this, but does not. + .\" .SH AUTHOR +-- +1.7.7 + diff --git a/fdisk-tinfo.patch b/fdisk-tinfo.patch index 4735d18..c9c7562 100644 --- a/fdisk-tinfo.patch +++ b/fdisk-tinfo.patch @@ -1,7 +1,7 @@ -Index: util-linux-2.20.1/fdisk/Makefile.am +Index: util-linux-2.21-rc2/fdisk/Makefile.am =================================================================== ---- util-linux-2.20.1.orig/fdisk/Makefile.am -+++ util-linux-2.20.1/fdisk/Makefile.am +--- util-linux-2.21-rc2.orig/fdisk/Makefile.am ++++ util-linux-2.21-rc2/fdisk/Makefile.am @@ -64,9 +64,13 @@ sbin_PROGRAMS += cfdisk dist_man_MANS += cfdisk.8 cfdisk_SOURCES = cfdisk.c $(fdisk_common) diff --git a/fix-ac-init.patch b/fix-ac-init.patch new file mode 100644 index 0000000..ca4eabd --- /dev/null +++ b/fix-ac-init.patch @@ -0,0 +1,12 @@ +Index: util-linux-2.21-rc2/configure.ac +=================================================================== +--- util-linux-2.21-rc2.orig/configure.ac ++++ util-linux-2.21-rc2/configure.ac +@@ -1,6 +1,4 @@ +-AC_INIT(util-linux, +- m4_esyscmd([tools/git-version-gen .tarball-version]), +- kzak@redhat.com) ++AC_INIT(util-linux, 2.21-rc2, kzak@redhat.com) + + AC_PREREQ(2.60) + diff --git a/fsck-use-FS-blacklist-for-non-all-mode-too.patch b/fsck-use-FS-blacklist-for-non-all-mode-too.patch deleted file mode 100644 index 398e091..0000000 --- a/fsck-use-FS-blacklist-for-non-all-mode-too.patch +++ /dev/null @@ -1,94 +0,0 @@ -From e31741980762744352890d37522cbf4dd0ced9c4 Mon Sep 17 00:00:00 2001 -From: Karel Zak -Date: Wed, 2 Nov 2011 15:51:45 +0100 -Subject: [PATCH] fsck: use FS blacklist for non-all mode too - -Reported-by: Lennart Poettering -Signed-off-by: Karel Zak -Signed-off-by: Petr Uzel ---- - fsck/fsck.c | 43 +++++++++++++++++++++++++++++++++++++++---- - 1 files changed, 39 insertions(+), 4 deletions(-) - -Index: util-linux-2.20.1/fsck/fsck.c -=================================================================== ---- util-linux-2.20.1.orig/fsck/fsck.c -+++ util-linux-2.20.1/fsck/fsck.c -@@ -57,14 +57,35 @@ - #include "xalloc.h" - - static const char *ignored_types[] = { -+ "9p", -+ "afs", -+ "autofs", -+ "binfmt_misc", -+ "cgroup", -+ "cifs", -+ "cpuset", -+ "debugfs", -+ "devfs", -+ "devpts", -+ "devtmpfs", -+ "dlmfs", -+ "fusectl", -+ "fuse.gvfs-fuse-daemon", -+ "hugetlbfs", - "ignore", - "iso9660", -+ "mqueue" -+ "ncpfs", - "nfs", - "proc", -+ "rpc_pipefs", -+ "securityfs", -+ "smbfs", -+ "spufs", - "sw", - "swap", -+ "sysfs", - "tmpfs", -- "devpts", - NULL - }; - -@@ -953,6 +974,18 @@ static int device_exists(const char *dev - return 1; - } - -+static int ignored_type(const char *fstype) -+{ -+ const char **ip; -+ -+ for(ip = ignored_types; *ip; ip++) { -+ if (strcmp(fstype, *ip) == 0) -+ return 1; -+ } -+ -+ return 0; -+} -+ - /* Check if we should ignore this filesystem. */ - static int ignore(struct fs_info *fs) - { -@@ -1000,8 +1033,8 @@ static int ignore(struct fs_info *fs) - if (!fs_match(fs, &fs_type_compiled)) return 1; - - /* Are we ignoring this type? */ -- for(ip = ignored_types; *ip; ip++) -- if (strcmp(fs->type, *ip) == 0) return 1; -+ if (fs->type && ignored_type(fs->type)) -+ return 1; - - /* Do we really really want to check this fs? */ - for(ip = really_wanted; *ip; ip++) -@@ -1461,7 +1494,9 @@ int main(int argc, char *argv[]) - 0, -1, -1); - if (!fs) - continue; -- } -+ } else if (fs->type && ignored_type(fs->type)) -+ continue; -+ - if (ignore_mounted && is_mounted(fs->device)) - continue; - status |= fsck_device(fs, interactive); diff --git a/libmount-fix-chdir-to-parent-for-restricted-user-umo.patch b/libmount-fix-chdir-to-parent-for-restricted-user-umo.patch deleted file mode 100644 index 994ac0d..0000000 --- a/libmount-fix-chdir-to-parent-for-restricted-user-umo.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 6107377322d5d6866c3aa363def656fdf68311e6 Mon Sep 17 00:00:00 2001 -From: Karel Zak -Date: Tue, 8 Nov 2011 21:47:23 +0100 -Subject: [PATCH] libmount: fix chdir to parent for restricted (user) umounts - -Reported-by: Petr Uzel -Signed-off-by: Karel Zak -Signed-off-by: Petr Uzel ---- - libmount/src/utils.c | 41 +++++++++++++++++++++++++---------------- - 1 files changed, 25 insertions(+), 16 deletions(-) - -Index: util-linux-2.20.1/libmount/src/utils.c -=================================================================== ---- util-linux-2.20.1.orig/libmount/src/utils.c -+++ util-linux-2.20.1/libmount/src/utils.c -@@ -62,34 +62,40 @@ static char *stripoff_last_component(cha - if (!p) - return NULL; - *p = '\0'; -- return ++p; -+ return p + 1; - } - --/* Note that the @target has to be absolute path (so at least "/") -+/* -+ * Note that the @target has to be absolute path (so at least "/"). The -+ * @filename returns allocated buffer with last path component, for example: -+ * -+ * mnt_chdir_to_parent("/mnt/test", &buf) ==> chdir("/mnt"), buf="test" - */ - int mnt_chdir_to_parent(const char *target, char **filename) - { -- char *path, *last = NULL; -+ char *buf, *parent, *last = NULL; - char cwd[PATH_MAX]; - int rc = -EINVAL; - - if (!target || *target != '/') - return -EINVAL; - -- path = strdup(target); -- if (!path) -+ DBG(UTILS, mnt_debug("moving to %s parent", target)); -+ -+ buf = strdup(target); -+ if (!buf) - return -ENOMEM; - -- if (*(path + 1) != '\0') { -- last = stripoff_last_component(path); -+ if (*(buf + 1) != '\0') { -+ last = stripoff_last_component(buf); - if (!last) - goto err; - } -- if (!*path) -- *path = '/'; /* root */ - -- if (chdir(path) == -1) { -- DBG(UTILS, mnt_debug("failed to chdir to %s: %m", path)); -+ parent = buf && *buf ? buf : "/"; -+ -+ if (chdir(parent) == -1) { -+ DBG(UTILS, mnt_debug("failed to chdir to %s: %m", parent)); - rc = -errno; - goto err; - } -@@ -98,14 +104,17 @@ int mnt_chdir_to_parent(const char *targ - rc = -errno; - goto err; - } -- if (strcmp(cwd, path) != 0) { -- DBG(UTILS, mnt_debug("path moved (%s -> %s)", path, cwd)); -+ if (strcmp(cwd, parent) != 0) { -+ DBG(UTILS, mnt_debug( -+ "unexpected chdir (expected=%s, cwd=%s)", parent, cwd)); - goto err; - } - -- DBG(CXT, mnt_debug("current directory moved to %s", path)); -+ DBG(CXT, mnt_debug( -+ "current directory moved to %s [last_component='%s']", -+ parent, last)); - -- *filename = path; -+ *filename = buf; - - if (!last || !*last) - memcpy(*filename, ".", 2); -@@ -113,7 +122,7 @@ int mnt_chdir_to_parent(const char *targ - memcpy(*filename, last, strlen(last) + 1); - return 0; - err: -- free(path); -+ free(buf); - return rc; - } - diff --git a/libmount-ignore-tailing-slash-in-netfs-source-paths.patch b/libmount-ignore-tailing-slash-in-netfs-source-paths.patch deleted file mode 100644 index d39b533..0000000 --- a/libmount-ignore-tailing-slash-in-netfs-source-paths.patch +++ /dev/null @@ -1,218 +0,0 @@ -From b106d052383083b80c0dc41f1555d2661db00374 Mon Sep 17 00:00:00 2001 -From: Petr Uzel -Date: Tue, 8 Nov 2011 16:25:01 +0100 -Subject: [PATCH] libmount: ignore tailing slash in netfs source paths - -Addresses: https://bugzilla.novell.com/show_bug.cgi?id=728480 -Signed-off-by: Petr Uzel -Signed-off-by: Karel Zak ---- - include/strutils.h | 2 ++ - lib/strutils.c | 32 ++++++++++++++++++++++++++++++++ - libmount/src/fs.c | 5 +++-- - libmount/src/tab.c | 17 ++++++++++++----- - libmount/src/tab_parse.c | 11 +++++++++-- - mount/fstab.c | 3 ++- - 6 files changed, 60 insertions(+), 10 deletions(-) - -Index: util-linux-2.20.1/include/strutils.h -=================================================================== ---- util-linux-2.20.1.orig/include/strutils.h -+++ util-linux-2.20.1/include/strutils.h -@@ -44,4 +44,6 @@ extern int string_to_idarray(const char - extern int string_to_bitarray(const char *list, char *ary, - int (*name2bit)(const char *, size_t)); - -+extern int streq_except_trailing_slash(const char *s1, const char *s2); -+ - #endif -Index: util-linux-2.20.1/lib/strutils.c -=================================================================== ---- util-linux-2.20.1.orig/lib/strutils.c -+++ util-linux-2.20.1/lib/strutils.c -@@ -437,6 +437,40 @@ int string_to_bitarray(const char *list, - return 0; - } - -+ -+/* -+ * Compare two strings for equality, ignoring at most one trailing -+ * slash. -+ */ -+int streq_except_trailing_slash(const char *s1, const char *s2) -+{ -+ int equal; -+ -+ if (!s1 && !s2) -+ return 1; -+ if (!s1 || !s2) -+ return 0; -+ -+ equal = !strcmp(s1, s2); -+ -+ if (!equal) { -+ size_t len1 = strlen(s1); -+ size_t len2 = strlen(s2); -+ -+ if (len1 && *(s1 + len1 - 1) == '/') -+ len1--; -+ if (len2 && *(s2 + len2 - 1) == '/') -+ len2--; -+ if (len1 != len2) -+ return 0; -+ -+ equal = !strncmp(s1, s2, len1); -+ } -+ -+ return equal; -+} -+ -+ - #ifdef TEST_PROGRAM - - int main(int argc, char *argv[]) -Index: util-linux-2.20.1/libmount/src/fs.c -=================================================================== ---- util-linux-2.20.1.orig/libmount/src/fs.c -+++ util-linux-2.20.1/libmount/src/fs.c -@@ -16,6 +16,7 @@ - #include - - #include "mountP.h" -+#include "strutils.h" - - /** - * mnt_new_fs: -@@ -1142,7 +1143,7 @@ int mnt_fs_match_source(struct libmnt_fs - return 0; - - /* 1) native paths/tags */ -- if (!strcmp(source, fs->source)) -+ if (streq_except_trailing_slash(source, fs->source)) - return 1; - - if (!cache) -@@ -1156,7 +1157,7 @@ int mnt_fs_match_source(struct libmnt_fs - - /* 2) canonicalized and native */ - src = mnt_fs_get_srcpath(fs); -- if (src && !strcmp(cn, src)) -+ if (src && streq_except_trailing_slash(cn, src)) - return 1; - - /* 3) canonicalized and canonicalized */ -Index: util-linux-2.20.1/libmount/src/tab.c -=================================================================== ---- util-linux-2.20.1.orig/libmount/src/tab.c -+++ util-linux-2.20.1/libmount/src/tab.c -@@ -44,6 +44,7 @@ - #include - - #include "mountP.h" -+#include "strutils.h" - - /** - * mnt_new_table: -@@ -506,7 +507,7 @@ struct libmnt_fs *mnt_table_find_srcpath - - if (path == NULL && src == NULL) - return fs; /* source is "none" */ -- if (p && strcmp(p, path) == 0) -+ if (path && p && streq_except_trailing_slash(p, path)) - return fs; - if (!p && src) - ntags++; /* mnt_fs_get_srcpath() returs nothing, it's TAG */ -@@ -520,7 +521,7 @@ struct libmnt_fs *mnt_table_find_srcpath - mnt_reset_iter(&itr, direction); - while(mnt_table_next_fs(tb, &itr, &fs) == 0) { - p = mnt_fs_get_srcpath(fs); -- if (p && strcmp(p, cn) == 0) -+ if (p && streq_except_trailing_slash(p, cn)) - return fs; - } - } -@@ -551,7 +552,7 @@ struct libmnt_fs *mnt_table_find_srcpath - if (mnt_fs_get_tag(fs, &t, &v)) - continue; - x = mnt_resolve_tag(t, v, tb->cache); -- if (x && !strcmp(x, cn)) -+ if (x && streq_except_trailing_slash(x, cn)) - return fs; - } - } -@@ -566,7 +567,7 @@ struct libmnt_fs *mnt_table_find_srcpath - p = mnt_fs_get_srcpath(fs); - if (p) - p = mnt_resolve_path(p, tb->cache); -- if (p && strcmp(cn, p) == 0) -+ if (p && streq_except_trailing_slash(cn, p)) - return fs; - } - } -@@ -856,8 +857,14 @@ int mnt_table_is_fs_mounted(struct libmn - *t = mnt_fs_get_target(fs), - *r = mnt_fs_get_root(fs); - -- if (s && t && r && !strcmp(t, tgt) && -- !strcmp(s, src) && !strcmp(r, root)) -+ /* -+ * Note that kernel can add tailing slash to the -+ * network filesystem source paths. -+ */ -+ if (t && s && r && -+ strcmp(t, tgt) == 0 && -+ streq_except_trailing_slash(s, src) && -+ strcmp(r, root) == 0) - break; - } - if (fs) -Index: util-linux-2.20.1/libmount/src/tab_parse.c -=================================================================== ---- util-linux-2.20.1.orig/libmount/src/tab_parse.c -+++ util-linux-2.20.1/libmount/src/tab_parse.c -@@ -14,6 +14,7 @@ - #include "mangle.h" - #include "mountP.h" - #include "pathnames.h" -+#include "strutils.h" - - static inline char *skip_spaces(char *s) - { -@@ -654,8 +655,14 @@ static struct libmnt_fs *mnt_table_merge - if (fs->flags & MNT_FS_MERGED) - continue; - -- if (s && t && r && !strcmp(t, target) && -- !strcmp(s, src) && !strcmp(r, root)) -+ /* -+ * Note that kernel can add tailing slash to the network -+ * filesystem source path -+ */ -+ if (s && t && r && -+ strcmp(t, target) == 0 && -+ streq_except_trailing_slash(s, src) && -+ strcmp(r, root) == 0) - break; - } - -Index: util-linux-2.20.1/mount/fstab.c -=================================================================== ---- util-linux-2.20.1.orig/mount/fstab.c -+++ util-linux-2.20.1/mount/fstab.c -@@ -20,6 +20,7 @@ - #include "pathnames.h" - #include "nls.h" - #include "usleep.h" -+#include "strutils.h" - - #define streq(s, t) (strcmp ((s), (t)) == 0) - -@@ -436,7 +437,7 @@ getfs_by_devdir (const char *dev, const - ok = has_uuid(dev, fs + 5); - } else { - fs = canonicalize_spec(mc->m.mnt_fsname); -- ok = streq(fs, dev); -+ ok = streq_except_trailing_slash(fs, dev); - my_free(fs); - } - } diff --git a/util-linux-2.12r-fdisk_remove_bogus_warnings.patch b/util-linux-2.12r-fdisk_remove_bogus_warnings.patch index ca5a94c..3fa89cf 100644 --- a/util-linux-2.12r-fdisk_remove_bogus_warnings.patch +++ b/util-linux-2.12r-fdisk_remove_bogus_warnings.patch @@ -1,8 +1,8 @@ -Index: util-linux-ng-2.18/fdisk/fdisk.c +Index: util-linux-2.21-rc2/fdisk/fdisk.c =================================================================== ---- util-linux-ng-2.18.orig/fdisk/fdisk.c 2010-06-30 14:44:25.000000000 +0200 -+++ util-linux-ng-2.18/fdisk/fdisk.c 2010-07-08 14:35:07.000000000 +0200 -@@ -1838,6 +1838,7 @@ static void check_consistency(struct par +--- util-linux-2.21-rc2.orig/fdisk/fdisk.c ++++ util-linux-2.21-rc2/fdisk/fdisk.c +@@ -1767,6 +1767,7 @@ static void check_consistency(struct par /* compute logical ending (c, h, s) */ long2chs(get_start_sect(p) + get_nr_sects(p) - 1, &lec, &leh, &les); @@ -10,7 +10,7 @@ Index: util-linux-ng-2.18/fdisk/fdisk.c /* Same physical / logical beginning? */ if (cylinders <= 1024 && (pbc != lbc || pbh != lbh || pbs != lbs)) { printf(_("Partition %d has different physical/logical " -@@ -1854,7 +1855,6 @@ static void check_consistency(struct par +@@ -1783,7 +1784,6 @@ static void check_consistency(struct par printf(_("logical=(%d, %d, %d)\n"),lec, leh, les); } diff --git a/util-linux-2.17.1-mount_losetup_crypto.patch b/util-linux-2.17.1-mount_losetup_crypto.patch deleted file mode 100644 index 8f9a34c..0000000 --- a/util-linux-2.17.1-mount_losetup_crypto.patch +++ /dev/null @@ -1,1570 +0,0 @@ -From 2d5b9e07d5b8dd698d83a6702906eefc834a9af5 Mon Sep 17 00:00:00 2001 -From: Ludwig Nussel -Date: Thu, 29 Nov 2007 17:46:36 +0100 -Subject: [PATCH] losetup: support password hashing and specifying the key length - -* add support for password hashing (sha512, sha384, sha256, rmd160). -* add support for loop-AES style strings like "twofish256" for - specifying the encryption algorithm and key length. - -Based on the SUSE patch from Ludwig Nussel , -this patch adds password hashing for cryptoloop devices. While -cryptoloop is deprecated, users may still wish to access existing -volumes. - -Incompatible change: - Default is now to hash using sha256, sha384 or sha512 depending - on key length (16, 24, or 32 bytes). Debian users will need to - specify "--phash rmd160" to access existing Debian devices. - Others will need to specify '--phash none'. - -sha512.c is from loop-AES. - -Signed-off-by: Ludwig Nussel ---- - mount/Makefile.am | 3 +- - mount/lomount.c | 174 +++++++++++++++--- - mount/lomount.h | 5 +- - mount/losetup.8 | 11 + - mount/mount.8 | 13 ++ - mount/mount.c | 21 ++- - mount/rmd160.c | 532 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - mount/rmd160.h | 11 + - mount/sha512.c | 432 +++++++++++++++++++++++++++++++++++++++++++ - mount/sha512.h | 45 +++++ - 10 files changed, 1219 insertions(+), 28 deletions(-) - create mode 100644 mount/rmd160.c - create mode 100644 mount/rmd160.h - create mode 100644 mount/sha512.c - create mode 100644 mount/sha512.h - -Index: util-linux-2.20-rc2/mount/Makefile.am -=================================================================== ---- util-linux-2.20-rc2.orig/mount/Makefile.am -+++ util-linux-2.20-rc2/mount/Makefile.am -@@ -7,7 +7,7 @@ sbin_PROGRAMS = losetup swapon - dist_man_MANS = fstab.5 mount.8 swapoff.8 swapon.8 umount.8 losetup.8 - - # generic sources for all programs (mount, umount, losetup) --srcs_common = sundries.c xmalloc.c $(top_srcdir)/lib/canonicalize.c sundries.h xmalloc.h -+srcs_common = sundries.c xmalloc.c $(top_srcdir)/lib/canonicalize.c sundries.h xmalloc.h rmd160.c sha512.c - - # generic header for mount and umount - hdrs_mount = fstab.h mount_mntent.h mount_constants.h \ -Index: util-linux-2.20-rc2/mount/lomount.c -=================================================================== ---- util-linux-2.20-rc2.orig/mount/lomount.c -+++ util-linux-2.20-rc2/mount/lomount.c -@@ -23,6 +23,12 @@ - #include "sundries.h" - #include "xmalloc.h" - #include "pathnames.h" -+#include "rmd160.h" -+#include "sha512.h" -+ -+#ifndef MIN -+#define MIN(a,b) ((a 3) { -+ if(isdigit(loopinfo64.lo_crypt_name[len-3]) -+ && isdigit(loopinfo64.lo_crypt_name[len-2]) -+ && isdigit(loopinfo64.lo_crypt_name[len-1])) { -+ loopinfo64.lo_encrypt_key_size = atoi((char*)&loopinfo64.lo_crypt_name[len-3]) >> 3; -+ loopinfo64.lo_crypt_name[len-3] = 0; -+ } -+ } -+ -+ if(keysz && loopinfo64.lo_encrypt_key_size && loopinfo64.lo_encrypt_key_size != keysz >> 3) { -+ fprintf(stderr, _("please either specify '%s%d' or -e '%s' -k '%d'\n"), -+ loopinfo64.lo_crypt_name, loopinfo64.lo_encrypt_key_size<<3, -+ loopinfo64.lo_crypt_name, keysz); -+ return 1; -+ } - } - } - -@@ -855,20 +914,69 @@ set_loop(const char *device, const char - } - #endif - -- switch (loopinfo64.lo_encrypt_type) { -- case LO_CRYPT_NONE: -- loopinfo64.lo_encrypt_key_size = 0; -- break; -- case LO_CRYPT_XOR: -- pass = getpass(_("Password: ")); -- goto gotpass; -- default: -- pass = xgetpass(pfd, _("Password: ")); -- gotpass: -+ if (loopinfo64.lo_encrypt_type != LO_CRYPT_NONE) { -+ void (*hfunc)(const unsigned char*, size_t, unsigned char*, size_t) = NULL; -+ - memset(loopinfo64.lo_encrypt_key, 0, LO_KEY_SIZE); -- xstrncpy((char *)loopinfo64.lo_encrypt_key, pass, LO_KEY_SIZE); -+ -+ pass = xgetpass(pfd, _("Password: ")); -+ if(!pass) -+ return 1; -+ -+ // set default hash functions, loop-AES compatible -+ if(loopinfo64.lo_encrypt_type == LO_CRYPT_CRYPTOAPI) { -+ hfunc = sha256_hash_buffer; -+ if(loopinfo64.lo_encrypt_key_size == 24) hfunc = sha384_hash_buffer; -+ if(loopinfo64.lo_encrypt_key_size == 32) hfunc = sha512_hash_buffer; -+ } else if(loopinfo64.lo_encrypt_type == 3 ) { // LO_CRYPT_FISH -+ if(!strcmp(encryption, "twofishSL92")) { -+ hfunc = sha512_hash_buffer; -+ loopinfo64.lo_encrypt_key_size = 32; -+ } else { -+ hfunc = phash_rmd160; -+ loopinfo64.lo_encrypt_key_size = 20; -+ } -+ } else { -+ hfunc = phash_none; -+ loopinfo64.lo_encrypt_key_size = keysz?keysz>>3:LO_KEY_SIZE; -+ } -+ -+ if(!loopinfo64.lo_encrypt_key_size) { -+ if(!keysz) { -+ fprintf(stderr, _("please specify a key length\n")); -+ return 1; -+ } -+ loopinfo64.lo_encrypt_key_size = keysz>>3; -+ } -+ -+ if((unsigned)loopinfo64.lo_encrypt_key_size > sizeof(loopinfo64.lo_encrypt_key)) { -+ fprintf(stderr, _("invalid key length\n")); -+ return 1; -+ } -+ -+ if (phash) { -+ if(!strcasecmp(phash, "sha512")) { -+ hfunc = sha512_hash_buffer; -+ } else if(!strcasecmp(phash, "sha384")) { -+ hfunc = sha384_hash_buffer; -+ } else if(!strcasecmp(phash, "sha256")) { -+ hfunc = sha256_hash_buffer; -+ } else if(!strcasecmp(phash, "rmd160")) { -+ hfunc = phash_rmd160; -+ } else if(!strcasecmp(phash, "none")) { -+ hfunc = phash_none; -+ } else { -+ fprintf(stderr, _("unsupported hash method '%s'\n"), phash); -+ return 1; -+ } -+ } -+ -+ if(hfunc) { -+ hfunc((unsigned char*)pass, strlen(pass), loopinfo64.lo_encrypt_key, loopinfo64.lo_encrypt_key_size); -+ } -+ -+ // zero buffer - memset(pass, 0, strlen(pass)); -- loopinfo64.lo_encrypt_key_size = LO_KEY_SIZE; - } - - if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { -@@ -1024,14 +1132,20 @@ usage(FILE *out) { - progname); - - fputs(_("\nOptions:\n"), out); -- fputs(_(" -e, --encryption enable data encryption with specified \n" -- " -h, --help this help\n" -- " -o, --offset start at offset into file\n" -+ fputs(_(" -e | --encryption enable data encryption with specified \n" -+ " -H | --phash hash password using specified algorithm (sha512/sha256/sha384/rmd160/none)\n" -+ " -h | --help this help\n" -+ " -k | --keybits specify number of bits in the hashed key given\n" -+ " to the cipher. Some ciphers support several key\n" -+ " sizes and might be more efficient with a smaller\n" -+ " key size. Key sizes < 128 are generally not\n" -+ " recommended\n" -+ " -o | --offset start at offset into file\n" - " --sizelimit loop limited to only bytes of the file\n" -- " -p, --pass-fd read passphrase from file descriptor \n" -- " -r, --read-only setup read-only loop device\n" -+ " -p | --pass-fd read passphrase from file descriptor \n" -+ " -r | --read-only setup read-only loop device\n" - " --show print device name (with -f )\n" -- " -v, --verbose verbose mode\n\n"), out); -+ " -v | --verbose verbose mode\n\n"), out); - - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); - } -@@ -1039,11 +1153,14 @@ usage(FILE *out) { - int - main(int argc, char **argv) { - char *p, *offset, *sizelimit, *encryption, *passfd, *device, *file, *assoc; -+ char *keysize; -+ char *phash = NULL; - int delete, find, c, all, capacity; - int res = 0; - int showdev = 0; - int ro = 0; - int pfd = -1; -+ int keysz = 0; - uintmax_t off = 0, slimit = 0; - - static const struct option longopts[] = { -@@ -1053,6 +1170,8 @@ main(int argc, char **argv) { - { "encryption", 1, 0, 'e' }, - { "find", 0, 0, 'f' }, - { "help", 0, 0, 'h' }, -+ { "keybits", 1, 0, 'k' }, -+ { "phash", 1, 0, 'H' }, - { "associated", 1, 0, 'j' }, - { "offset", 1, 0, 'o' }, - { "sizelimit", 1, 0, 128 }, -@@ -1069,12 +1188,13 @@ main(int argc, char **argv) { - - capacity = delete = find = all = 0; - assoc = offset = sizelimit = encryption = passfd = NULL; -+ keysize = NULL; - - progname = argv[0]; - if ((p = strrchr(progname, '/')) != NULL) - progname = p+1; - -- while ((c = getopt_long(argc, argv, "acde:E:fhj:o:p:rsv", -+ while ((c = getopt_long(argc, argv, "acde:E:fhj:k:o:p:rsvH:", - longopts, NULL)) != -1) { - switch (c) { - case 'a': -@@ -1102,6 +1222,12 @@ main(int argc, char **argv) { - case 'j': - assoc = optarg; - break; -+ case 'k': -+ keysize = optarg; -+ break; -+ case 'H': -+ phash = optarg; -+ break; - case 'o': - offset = optarg; - break; -@@ -1191,8 +1317,10 @@ main(int argc, char **argv) { - else { - if (passfd && sscanf(passfd, "%d", &pfd) != 1) - usage(stderr); -+ if (keysize && sscanf(keysize,"%d",&keysz) != 1) -+ usage(stderr); - do { -- res = set_loop(device, file, off, slimit, encryption, pfd, &ro); -+ res = set_loop(device, file, off, slimit, encryption, phash, pfd, &ro, keysz); - if (res == 2 && find) { - if (verbose) - printf(_("stolen loop=%s...trying again\n"), -Index: util-linux-2.20-rc2/mount/lomount.h -=================================================================== ---- util-linux-2.20-rc2.orig/mount/lomount.h -+++ util-linux-2.20-rc2/mount/lomount.h -@@ -1,8 +1,8 @@ - #ifndef UTIL_LINUX_LOMOUNT_H - #define UTIL_LINUX_LOMOUNT_H - --extern int set_loop(const char *, const char *, unsigned long long, unsigned long long, -- const char *, int, int *); -+extern int set_loop(const char * device, const char * file, unsigned long long offset, unsigned long long, -+ const char * encryption, const char *phash, int pfd, int *options, int keysz); - extern int del_loop(const char *); - extern int is_loop_device(const char *); - extern int is_loop_autoclear(const char *device); -Index: util-linux-2.20-rc2/mount/losetup.8 -=================================================================== ---- util-linux-2.20-rc2.orig/mount/losetup.8 -+++ util-linux-2.20-rc2/mount/losetup.8 -@@ -96,9 +96,18 @@ find the first unused loop device. If a - argument is present, use this device. Otherwise, print its name - .IP "\fB\-h, \-\-help\fP" - print help -+.IP "\fB\-H, \-\-phash \fIhash_type\fP" -+Specify the password hash function. Valid values are: -+.BR sha512 (default), -+.BR sha256 , -+.BR sha384 , -+.BR rmd160 , -+.BR none . - .IP "\fB\-j, \-\-associated \fIfile\fP" - show status of all loop devices associated with given - .I file -+.IP "\fB\-k, \-\-keybits \fInum\fP" -+set the number of bits to use in key to \fInum\fP. - .IP "\fB\-o, \-\-offset \fIoffset\fP" - the data start is moved \fIoffset\fP bytes into the specified file or - device -@@ -169,6 +178,8 @@ the command - .fi - .SH RESTRICTION - DES encryption is painfully slow. On the other hand, XOR is terribly weak. -+Both are insecure nowadays. Some ciphers may require a licence for you to be -+allowed to use them. - - Cryptoloop is deprecated in favor of dm-crypt. For more details see - .BR cryptsetup (8). -Index: util-linux-2.20-rc2/mount/mount.8 -=================================================================== ---- util-linux-2.20-rc2.orig/mount/mount.8 -+++ util-linux-2.20-rc2/mount/mount.8 -@@ -915,6 +915,15 @@ Every time the inode is modified, the i_ - .B noiversion - Do not increment the i_version inode field. - .TP -+.B encryption -+Specifies an encryption algorithm to use. Used in conjunction with the -+.BR loop " option." -+.TP -+.B keybits -+Specifies the key size to use for an encryption algorithm. Used in conjunction -+with the -+.BR loop " and " encryption " options." -+.TP - .B mand - Allow mandatory locks on this filesystem. See - .BR fcntl (2). -@@ -2697,6 +2706,10 @@ that are really options to - .BR \%losetup (8). - (These options can be used in addition to those specific - to the filesystem type.) -+If the mount requires a passphrase, you will be prompted for one unless -+you specify a file descriptor to read from instead with the -+.BR \-\-pass-fd -+option. - - Since Linux 2.6.25 is supported auto-destruction of loop devices and - then any loop device allocated by -Index: util-linux-2.20-rc2/mount/mount.c -=================================================================== ---- util-linux-2.20-rc2.orig/mount/mount.c -+++ util-linux-2.20-rc2/mount/mount.c -@@ -105,6 +105,9 @@ struct mountargs { - void *data; - }; - -+/* Contains the preferred keysize in bits we want to use */ -+static int keysz = 0; -+ - /* Map from -o and fstab option strings to the flag argument to mount(2). */ - struct opt_map { - const char *opt; /* option name */ -@@ -210,6 +213,7 @@ static int opt_nofail = 0; - - static const char *opt_loopdev, *opt_vfstype, *opt_offset, *opt_sizelimit, - *opt_encryption, *opt_speed, *opt_comment, *opt_uhelper, *opt_helper; -+static const char *opt_keybits, *opt_phash; - - static int is_readonly(const char *node); - static int mounted (const char *spec0, const char *node0, struct mntentchn *fstab_mc); -@@ -226,6 +230,8 @@ static struct string_opt_map { - { "offset=", 0, &opt_offset }, - { "sizelimit=", 0, &opt_sizelimit }, - { "encryption=", 0, &opt_encryption }, -+ { "phash=", 0, &opt_phash }, -+ { "keybits=", 0, &opt_keybits }, - { "speed=", 0, &opt_speed }, - { "comment=", 1, &opt_comment }, - { "uhelper=", 0, &opt_uhelper }, -@@ -1224,7 +1230,8 @@ loop_check(const char **spec, const char - *type = opt_vfstype; - } - -- *loop = ((*flags & MS_LOOP) || *loopdev || opt_offset || opt_sizelimit || opt_encryption); -+ *loop = ((*flags & MS_LOOP) || *loopdev || opt_offset || opt_sizelimit || -+ opt_encryption || opt_phash || opt_keybits); - *loopfile = *spec; - - /* Automatically create a loop device from a regular file if a filesystem -@@ -1289,7 +1296,7 @@ loop_check(const char **spec, const char - printf(_("mount: going to use the loop device %s\n"), *loopdev); - - if ((res = set_loop(*loopdev, *loopfile, offset, sizelimit, -- opt_encryption, pfd, &loop_opts))) { -+ opt_encryption, opt_phash, pfd, &loop_opts, keysz))) { - if (res == 2) { - /* loop dev has been grabbed by some other process, - try again, if not given explicitly */ -@@ -2269,6 +2276,7 @@ static struct option longopts[] = { - { "options", 1, 0, 'o' }, - { "test-opts", 1, 0, 'O' }, - { "pass-fd", 1, 0, 'p' }, -+ { "keybits", 1, 0, 'k' }, - { "types", 1, 0, 't' }, - { "bind", 0, 0, 'B' }, - { "move", 0, 0, 'M' }, -@@ -2432,6 +2440,7 @@ main(int argc, char *argv[]) { - char *options = NULL, *test_opts = NULL, *node; - const char *spec = NULL; - char *label = NULL; -+ char *keysize = NULL; - char *uuid = NULL; - char *types = NULL; - char *p; -@@ -2462,7 +2471,7 @@ main(int argc, char *argv[]) { - initproctitle(argc, argv); - #endif - -- while ((c = getopt_long (argc, argv, "aBfFhilL:Mno:O:p:rRsU:vVwt:", -+ while ((c = getopt_long (argc, argv, "aBfFhik:lL:Mno:O:p:rRsU:vVwt:", - longopts, NULL)) != -1) { - switch (c) { - case 'a': /* mount everything in fstab */ -@@ -2483,6 +2492,9 @@ main(int argc, char *argv[]) { - case 'i': - external_allowed = 0; - break; -+ case 'k': -+ keysize = optarg; -+ break; - case 'l': - list_with_volumelabel = 1; - break; -@@ -2633,6 +2645,9 @@ main(int argc, char *argv[]) { - - atexit(unlock_mtab); - -+ if (keysize && sscanf(keysize,"%d",&keysz) != 1) -+ die (EX_USAGE, _("mount: argument to --keybits or -k must be a number")); -+ - switch (argc+specseen) { - case 0: - /* mount -a */ -Index: util-linux-2.20-rc2/mount/rmd160.c -=================================================================== ---- /dev/null -+++ util-linux-2.20-rc2/mount/rmd160.c -@@ -0,0 +1,532 @@ -+/* rmd160.c - RIPE-MD160 -+ * Copyright (C) 1998 Free Software Foundation, Inc. -+ */ -+ -+/* This file was part of GnuPG. Modified for use within the Linux -+ * mount utility by Marc Mutz . None of this code is -+ * by myself. I just removed everything that you don't need when all -+ * you want to do is to use rmd160_hash_buffer(). -+ * My comments are marked with (mm). */ -+ -+/* GnuPG 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 2 of the License, or -+ * (at your option) any later version. -+ * -+ * GnuPG 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, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -+ -+#include /* (mm) for memcpy */ -+#include /* (mm) for BIG_ENDIAN and BYTE_ORDER */ -+#include "rmd160.h" -+ -+/* (mm) these are used by the original GnuPG file. In order to modify -+ * that file not too much, we keep the notations. maybe it would be -+ * better to include linux/types.h and typedef __u32 to u32 and __u8 -+ * to byte? */ -+typedef unsigned int u32; /* taken from e.g. util-linux's minix.h */ -+typedef unsigned char byte; -+ -+typedef struct { -+ u32 h0,h1,h2,h3,h4; -+ u32 nblocks; -+ byte buf[64]; -+ int count; -+} RMD160_CONTEXT; -+ -+/**************** -+ * Rotate a 32 bit integer by n bytes -+ */ -+#if defined(__GNUC__) && defined(__i386__) -+static inline u32 -+rol( u32 x, int n) -+{ -+ __asm__("roll %%cl,%0" -+ :"=r" (x) -+ :"0" (x),"c" (n)); -+ return x; -+} -+#else -+ #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) -+#endif -+ -+/********************************* -+ * RIPEMD-160 is not patented, see (as of 25.10.97) -+ * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html -+ * Note that the code uses Little Endian byteorder, which is good for -+ * 386 etc, but we must add some conversion when used on a big endian box. -+ * -+ * -+ * Pseudo-code for RIPEMD-160 -+ * -+ * RIPEMD-160 is an iterative hash function that operates on 32-bit words. -+ * The round function takes as input a 5-word chaining variable and a 16-word -+ * message block and maps this to a new chaining variable. All operations are -+ * defined on 32-bit words. Padding is identical to that of MD4. -+ * -+ * -+ * RIPEMD-160: definitions -+ * -+ * -+ * nonlinear functions at bit level: exor, mux, -, mux, - -+ * -+ * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15) -+ * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31) -+ * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47) -+ * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63) -+ * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79) -+ * -+ * -+ * added constants (hexadecimal) -+ * -+ * K(j) = 0x00000000 (0 <= j <= 15) -+ * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2)) -+ * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3)) -+ * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5)) -+ * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7)) -+ * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2)) -+ * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3)) -+ * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5)) -+ * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7)) -+ * K'(j) = 0x00000000 (64 <= j <= 79) -+ * -+ * -+ * selection of message word -+ * -+ * r(j) = j (0 <= j <= 15) -+ * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 -+ * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 -+ * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 -+ * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -+ * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 -+ * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 -+ * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 -+ * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 -+ * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -+ * -+ * -+ * amount for rotate left (rol) -+ * -+ * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 -+ * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 -+ * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 -+ * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 -+ * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -+ * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 -+ * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 -+ * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 -+ * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 -+ * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -+ * -+ * -+ * initial value (hexadecimal) -+ * -+ * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476; -+ * h4 = 0xC3D2E1F0; -+ * -+ * -+ * RIPEMD-160: pseudo-code -+ * -+ * It is assumed that the message after padding consists of t 16-word blocks -+ * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15. -+ * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left -+ * shift (rotate) over s positions. -+ * -+ * -+ * for i := 0 to t-1 { -+ * A := h0; B := h1; C := h2; D = h3; E = h4; -+ * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4; -+ * for j := 0 to 79 { -+ * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E; -+ * A := E; E := D; D := rol_10(C); C := B; B := T; -+ * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)] -+ [+] K'(j)) [+] E'; -+ * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T; -+ * } -+ * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A'; -+ * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T; -+ * } -+ */ -+ -+/* Some examples: -+ * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31 -+ * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe -+ * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc -+ * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36 -+ * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc -+ * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b -+ * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189 -+ * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb -+ * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528 -+ */ -+ -+ -+static void -+rmd160_init( RMD160_CONTEXT *hd ) -+{ -+ hd->h0 = 0x67452301; -+ hd->h1 = 0xEFCDAB89; -+ hd->h2 = 0x98BADCFE; -+ hd->h3 = 0x10325476; -+ hd->h4 = 0xC3D2E1F0; -+ hd->nblocks = 0; -+ hd->count = 0; -+} -+ -+ -+ -+/**************** -+ * Transform the message X which consists of 16 32-bit-words -+ */ -+static void -+transform( RMD160_CONTEXT *hd, const byte *data ) -+{ -+ u32 a,b,c,d,e,aa,bb,cc,dd,ee,t; -+ #if BYTE_ORDER == BIG_ENDIAN -+ u32 x[16]; -+ { int i; -+ byte *p2, *p1; -+ for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) { -+ p2[3] = *p1++; -+ p2[2] = *p1++; -+ p2[1] = *p1++; -+ p2[0] = *p1++; -+ } -+ } -+ #else -+ #if 0 -+ u32 *x =(u32*)data; -+ #else -+ /* this version is better because it is always aligned; -+ * The performance penalty on a 586-100 is about 6% which -+ * is acceptable - because the data is more local it might -+ * also be possible that this is faster on some machines. -+ * This function (when compiled with -02 on gcc 2.7.2) -+ * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec; -+ * [measured with a 4MB data and "gpgm --print-md rmd160"] */ -+ u32 x[16]; -+ memcpy( x, data, 64 ); -+ #endif -+ #endif -+ -+ -+#define K0 0x00000000 -+#define K1 0x5A827999 -+#define K2 0x6ED9EBA1 -+#define K3 0x8F1BBCDC -+#define K4 0xA953FD4E -+#define KK0 0x50A28BE6 -+#define KK1 0x5C4DD124 -+#define KK2 0x6D703EF3 -+#define KK3 0x7A6D76E9 -+#define KK4 0x00000000 -+#define F0(x,y,z) ( (x) ^ (y) ^ (z) ) -+#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) ) -+#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) ) -+#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) ) -+#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) ) -+#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \ -+ a = rol(t,s) + e; \ -+ c = rol(c,10); \ -+ } while(0) -+ -+ /* left lane */ -+ a = hd->h0; -+ b = hd->h1; -+ c = hd->h2; -+ d = hd->h3; -+ e = hd->h4; -+ R( a, b, c, d, e, F0, K0, 0, 11 ); -+ R( e, a, b, c, d, F0, K0, 1, 14 ); -+ R( d, e, a, b, c, F0, K0, 2, 15 ); -+ R( c, d, e, a, b, F0, K0, 3, 12 ); -+ R( b, c, d, e, a, F0, K0, 4, 5 ); -+ R( a, b, c, d, e, F0, K0, 5, 8 ); -+ R( e, a, b, c, d, F0, K0, 6, 7 ); -+ R( d, e, a, b, c, F0, K0, 7, 9 ); -+ R( c, d, e, a, b, F0, K0, 8, 11 ); -+ R( b, c, d, e, a, F0, K0, 9, 13 ); -+ R( a, b, c, d, e, F0, K0, 10, 14 ); -+ R( e, a, b, c, d, F0, K0, 11, 15 ); -+ R( d, e, a, b, c, F0, K0, 12, 6 ); -+ R( c, d, e, a, b, F0, K0, 13, 7 ); -+ R( b, c, d, e, a, F0, K0, 14, 9 ); -+ R( a, b, c, d, e, F0, K0, 15, 8 ); -+ R( e, a, b, c, d, F1, K1, 7, 7 ); -+ R( d, e, a, b, c, F1, K1, 4, 6 ); -+ R( c, d, e, a, b, F1, K1, 13, 8 ); -+ R( b, c, d, e, a, F1, K1, 1, 13 ); -+ R( a, b, c, d, e, F1, K1, 10, 11 ); -+ R( e, a, b, c, d, F1, K1, 6, 9 ); -+ R( d, e, a, b, c, F1, K1, 15, 7 ); -+ R( c, d, e, a, b, F1, K1, 3, 15 ); -+ R( b, c, d, e, a, F1, K1, 12, 7 ); -+ R( a, b, c, d, e, F1, K1, 0, 12 ); -+ R( e, a, b, c, d, F1, K1, 9, 15 ); -+ R( d, e, a, b, c, F1, K1, 5, 9 ); -+ R( c, d, e, a, b, F1, K1, 2, 11 ); -+ R( b, c, d, e, a, F1, K1, 14, 7 ); -+ R( a, b, c, d, e, F1, K1, 11, 13 ); -+ R( e, a, b, c, d, F1, K1, 8, 12 ); -+ R( d, e, a, b, c, F2, K2, 3, 11 ); -+ R( c, d, e, a, b, F2, K2, 10, 13 ); -+ R( b, c, d, e, a, F2, K2, 14, 6 ); -+ R( a, b, c, d, e, F2, K2, 4, 7 ); -+ R( e, a, b, c, d, F2, K2, 9, 14 ); -+ R( d, e, a, b, c, F2, K2, 15, 9 ); -+ R( c, d, e, a, b, F2, K2, 8, 13 ); -+ R( b, c, d, e, a, F2, K2, 1, 15 ); -+ R( a, b, c, d, e, F2, K2, 2, 14 ); -+ R( e, a, b, c, d, F2, K2, 7, 8 ); -+ R( d, e, a, b, c, F2, K2, 0, 13 ); -+ R( c, d, e, a, b, F2, K2, 6, 6 ); -+ R( b, c, d, e, a, F2, K2, 13, 5 ); -+ R( a, b, c, d, e, F2, K2, 11, 12 ); -+ R( e, a, b, c, d, F2, K2, 5, 7 ); -+ R( d, e, a, b, c, F2, K2, 12, 5 ); -+ R( c, d, e, a, b, F3, K3, 1, 11 ); -+ R( b, c, d, e, a, F3, K3, 9, 12 ); -+ R( a, b, c, d, e, F3, K3, 11, 14 ); -+ R( e, a, b, c, d, F3, K3, 10, 15 ); -+ R( d, e, a, b, c, F3, K3, 0, 14 ); -+ R( c, d, e, a, b, F3, K3, 8, 15 ); -+ R( b, c, d, e, a, F3, K3, 12, 9 ); -+ R( a, b, c, d, e, F3, K3, 4, 8 ); -+ R( e, a, b, c, d, F3, K3, 13, 9 ); -+ R( d, e, a, b, c, F3, K3, 3, 14 ); -+ R( c, d, e, a, b, F3, K3, 7, 5 ); -+ R( b, c, d, e, a, F3, K3, 15, 6 ); -+ R( a, b, c, d, e, F3, K3, 14, 8 ); -+ R( e, a, b, c, d, F3, K3, 5, 6 ); -+ R( d, e, a, b, c, F3, K3, 6, 5 ); -+ R( c, d, e, a, b, F3, K3, 2, 12 ); -+ R( b, c, d, e, a, F4, K4, 4, 9 ); -+ R( a, b, c, d, e, F4, K4, 0, 15 ); -+ R( e, a, b, c, d, F4, K4, 5, 5 ); -+ R( d, e, a, b, c, F4, K4, 9, 11 ); -+ R( c, d, e, a, b, F4, K4, 7, 6 ); -+ R( b, c, d, e, a, F4, K4, 12, 8 ); -+ R( a, b, c, d, e, F4, K4, 2, 13 ); -+ R( e, a, b, c, d, F4, K4, 10, 12 ); -+ R( d, e, a, b, c, F4, K4, 14, 5 ); -+ R( c, d, e, a, b, F4, K4, 1, 12 ); -+ R( b, c, d, e, a, F4, K4, 3, 13 ); -+ R( a, b, c, d, e, F4, K4, 8, 14 ); -+ R( e, a, b, c, d, F4, K4, 11, 11 ); -+ R( d, e, a, b, c, F4, K4, 6, 8 ); -+ R( c, d, e, a, b, F4, K4, 15, 5 ); -+ R( b, c, d, e, a, F4, K4, 13, 6 ); -+ -+ aa = a; bb = b; cc = c; dd = d; ee = e; -+ -+ /* right lane */ -+ a = hd->h0; -+ b = hd->h1; -+ c = hd->h2; -+ d = hd->h3; -+ e = hd->h4; -+ R( a, b, c, d, e, F4, KK0, 5, 8); -+ R( e, a, b, c, d, F4, KK0, 14, 9); -+ R( d, e, a, b, c, F4, KK0, 7, 9); -+ R( c, d, e, a, b, F4, KK0, 0, 11); -+ R( b, c, d, e, a, F4, KK0, 9, 13); -+ R( a, b, c, d, e, F4, KK0, 2, 15); -+ R( e, a, b, c, d, F4, KK0, 11, 15); -+ R( d, e, a, b, c, F4, KK0, 4, 5); -+ R( c, d, e, a, b, F4, KK0, 13, 7); -+ R( b, c, d, e, a, F4, KK0, 6, 7); -+ R( a, b, c, d, e, F4, KK0, 15, 8); -+ R( e, a, b, c, d, F4, KK0, 8, 11); -+ R( d, e, a, b, c, F4, KK0, 1, 14); -+ R( c, d, e, a, b, F4, KK0, 10, 14); -+ R( b, c, d, e, a, F4, KK0, 3, 12); -+ R( a, b, c, d, e, F4, KK0, 12, 6); -+ R( e, a, b, c, d, F3, KK1, 6, 9); -+ R( d, e, a, b, c, F3, KK1, 11, 13); -+ R( c, d, e, a, b, F3, KK1, 3, 15); -+ R( b, c, d, e, a, F3, KK1, 7, 7); -+ R( a, b, c, d, e, F3, KK1, 0, 12); -+ R( e, a, b, c, d, F3, KK1, 13, 8); -+ R( d, e, a, b, c, F3, KK1, 5, 9); -+ R( c, d, e, a, b, F3, KK1, 10, 11); -+ R( b, c, d, e, a, F3, KK1, 14, 7); -+ R( a, b, c, d, e, F3, KK1, 15, 7); -+ R( e, a, b, c, d, F3, KK1, 8, 12); -+ R( d, e, a, b, c, F3, KK1, 12, 7); -+ R( c, d, e, a, b, F3, KK1, 4, 6); -+ R( b, c, d, e, a, F3, KK1, 9, 15); -+ R( a, b, c, d, e, F3, KK1, 1, 13); -+ R( e, a, b, c, d, F3, KK1, 2, 11); -+ R( d, e, a, b, c, F2, KK2, 15, 9); -+ R( c, d, e, a, b, F2, KK2, 5, 7); -+ R( b, c, d, e, a, F2, KK2, 1, 15); -+ R( a, b, c, d, e, F2, KK2, 3, 11); -+ R( e, a, b, c, d, F2, KK2, 7, 8); -+ R( d, e, a, b, c, F2, KK2, 14, 6); -+ R( c, d, e, a, b, F2, KK2, 6, 6); -+ R( b, c, d, e, a, F2, KK2, 9, 14); -+ R( a, b, c, d, e, F2, KK2, 11, 12); -+ R( e, a, b, c, d, F2, KK2, 8, 13); -+ R( d, e, a, b, c, F2, KK2, 12, 5); -+ R( c, d, e, a, b, F2, KK2, 2, 14); -+ R( b, c, d, e, a, F2, KK2, 10, 13); -+ R( a, b, c, d, e, F2, KK2, 0, 13); -+ R( e, a, b, c, d, F2, KK2, 4, 7); -+ R( d, e, a, b, c, F2, KK2, 13, 5); -+ R( c, d, e, a, b, F1, KK3, 8, 15); -+ R( b, c, d, e, a, F1, KK3, 6, 5); -+ R( a, b, c, d, e, F1, KK3, 4, 8); -+ R( e, a, b, c, d, F1, KK3, 1, 11); -+ R( d, e, a, b, c, F1, KK3, 3, 14); -+ R( c, d, e, a, b, F1, KK3, 11, 14); -+ R( b, c, d, e, a, F1, KK3, 15, 6); -+ R( a, b, c, d, e, F1, KK3, 0, 14); -+ R( e, a, b, c, d, F1, KK3, 5, 6); -+ R( d, e, a, b, c, F1, KK3, 12, 9); -+ R( c, d, e, a, b, F1, KK3, 2, 12); -+ R( b, c, d, e, a, F1, KK3, 13, 9); -+ R( a, b, c, d, e, F1, KK3, 9, 12); -+ R( e, a, b, c, d, F1, KK3, 7, 5); -+ R( d, e, a, b, c, F1, KK3, 10, 15); -+ R( c, d, e, a, b, F1, KK3, 14, 8); -+ R( b, c, d, e, a, F0, KK4, 12, 8); -+ R( a, b, c, d, e, F0, KK4, 15, 5); -+ R( e, a, b, c, d, F0, KK4, 10, 12); -+ R( d, e, a, b, c, F0, KK4, 4, 9); -+ R( c, d, e, a, b, F0, KK4, 1, 12); -+ R( b, c, d, e, a, F0, KK4, 5, 5); -+ R( a, b, c, d, e, F0, KK4, 8, 14); -+ R( e, a, b, c, d, F0, KK4, 7, 6); -+ R( d, e, a, b, c, F0, KK4, 6, 8); -+ R( c, d, e, a, b, F0, KK4, 2, 13); -+ R( b, c, d, e, a, F0, KK4, 13, 6); -+ R( a, b, c, d, e, F0, KK4, 14, 5); -+ R( e, a, b, c, d, F0, KK4, 0, 15); -+ R( d, e, a, b, c, F0, KK4, 3, 13); -+ R( c, d, e, a, b, F0, KK4, 9, 11); -+ R( b, c, d, e, a, F0, KK4, 11, 11); -+ -+ -+ t = hd->h1 + d + cc; -+ hd->h1 = hd->h2 + e + dd; -+ hd->h2 = hd->h3 + a + ee; -+ hd->h3 = hd->h4 + b + aa; -+ hd->h4 = hd->h0 + c + bb; -+ hd->h0 = t; -+} -+ -+ -+/* Update the message digest with the contents -+ * of INBUF with length INLEN. -+ */ -+static void -+rmd160_write( RMD160_CONTEXT *hd, const byte *inbuf, size_t inlen) -+{ -+ if( hd->count == 64 ) { /* flush the buffer */ -+ transform( hd, hd->buf ); -+ hd->count = 0; -+ hd->nblocks++; -+ } -+ if( !inbuf ) -+ return; -+ if( hd->count ) { -+ for( ; inlen && hd->count < 64; inlen-- ) -+ hd->buf[hd->count++] = *inbuf++; -+ rmd160_write( hd, NULL, 0 ); -+ if( !inlen ) -+ return; -+ } -+ -+ while( inlen >= 64 ) { -+ transform( hd, inbuf ); -+ hd->count = 0; -+ hd->nblocks++; -+ inlen -= 64; -+ inbuf += 64; -+ } -+ for( ; inlen && hd->count < 64; inlen-- ) -+ hd->buf[hd->count++] = *inbuf++; -+} -+ -+/* The routine terminates the computation -+ */ -+ -+static void -+rmd160_final( RMD160_CONTEXT *hd ) -+{ -+ u32 t, msb, lsb; -+ byte *p; -+ -+ rmd160_write(hd, NULL, 0); /* flush */; -+ -+ msb = 0; -+ t = hd->nblocks; -+ if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */ -+ msb++; -+ msb += t >> 26; -+ t = lsb; -+ if( (lsb = t + hd->count) < t ) /* add the count */ -+ msb++; -+ t = lsb; -+ if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */ -+ msb++; -+ msb += t >> 29; -+ -+ if( hd->count < 56 ) { /* enough room */ -+ hd->buf[hd->count++] = 0x80; /* pad */ -+ while( hd->count < 56 ) -+ hd->buf[hd->count++] = 0; /* pad */ -+ } -+ else { /* need one extra block */ -+ hd->buf[hd->count++] = 0x80; /* pad character */ -+ while( hd->count < 64 ) -+ hd->buf[hd->count++] = 0; -+ rmd160_write(hd, NULL, 0); /* flush */; -+ memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ -+ } -+ /* append the 64 bit count */ -+ hd->buf[56] = lsb ; -+ hd->buf[57] = lsb >> 8; -+ hd->buf[58] = lsb >> 16; -+ hd->buf[59] = lsb >> 24; -+ hd->buf[60] = msb ; -+ hd->buf[61] = msb >> 8; -+ hd->buf[62] = msb >> 16; -+ hd->buf[63] = msb >> 24; -+ transform( hd, hd->buf ); -+ -+ p = hd->buf; -+ #if BYTE_ORDER == BIG_ENDIAN -+ #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \ -+ *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0) -+ #else /* little endian */ -+ #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) -+ #endif -+ X(0); -+ X(1); -+ X(2); -+ X(3); -+ X(4); -+ #undef X -+} -+ -+/**************** -+ * Shortcut functions which puts the hash value of the supplied buffer -+ * into outbuf which must have a size of 20 bytes. -+ */ -+void -+rmd160_hash_buffer( unsigned char *outbuf, const unsigned char *buffer, size_t length ) -+{ -+ RMD160_CONTEXT hd; -+ -+ rmd160_init( &hd ); -+ rmd160_write( &hd, buffer, length ); -+ rmd160_final( &hd ); -+ memcpy( outbuf, hd.buf, 20 ); -+} -Index: util-linux-2.20-rc2/mount/rmd160.h -=================================================================== ---- /dev/null -+++ util-linux-2.20-rc2/mount/rmd160.h -@@ -0,0 +1,11 @@ -+#ifndef RMD160_H -+#define RMD160_H -+ -+#define RMD160_HASH_SIZE 20 -+ -+void -+rmd160_hash_buffer( unsigned char *outbuf, const unsigned char *buffer, size_t length ); -+ -+#endif /*RMD160_H*/ -+ -+ -Index: util-linux-2.20-rc2/mount/sha512.c -=================================================================== ---- /dev/null -+++ util-linux-2.20-rc2/mount/sha512.c -@@ -0,0 +1,432 @@ -+/* -+ * sha512.c -+ * -+ * Written by Jari Ruusu, April 16 2001 -+ * -+ * Copyright 2001 by Jari Ruusu. -+ * Redistribution of this file is permitted under the GNU Public License. -+ */ -+ -+#include -+#include -+#include "sha512.h" -+ -+/* Define one or more of these. If none is defined, you get all of them */ -+#if !defined(SHA256_NEEDED)&&!defined(SHA512_NEEDED)&&!defined(SHA384_NEEDED) -+# define SHA256_NEEDED 1 -+# define SHA512_NEEDED 1 -+# define SHA384_NEEDED 1 -+#endif -+ -+#if defined(SHA256_NEEDED) -+static const u_int32_t sha256_hashInit[8] = { -+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, -+ 0x1f83d9ab, 0x5be0cd19 -+}; -+static const u_int32_t sha256_K[64] = { -+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, -+ 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, -+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, -+ 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, -+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, -+ 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, -+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, -+ 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, -+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, -+ 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, -+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -+}; -+#endif -+ -+#if defined(SHA512_NEEDED) -+static const u_int64_t sha512_hashInit[8] = { -+ 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, -+ 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, -+ 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL -+}; -+#endif -+ -+#if defined(SHA384_NEEDED) -+static const u_int64_t sha384_hashInit[8] = { -+ 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL, -+ 0x152fecd8f70e5939ULL, 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL, -+ 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL -+}; -+#endif -+ -+#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED) -+static const u_int64_t sha512_K[80] = { -+ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, -+ 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, -+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL, -+ 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, -+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, -+ 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, -+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL, -+ 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, -+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, -+ 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, -+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL, -+ 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, -+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, -+ 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, -+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, -+ 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, -+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, -+ 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, -+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL, -+ 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, -+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, -+ 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, -+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, -+ 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, -+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, -+ 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, -+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -+}; -+#endif -+ -+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) -+#define R(x,y) ((y) >> (x)) -+ -+#if defined(SHA256_NEEDED) -+void sha256_init(sha256_context *ctx) -+{ -+ memcpy(&ctx->sha_H[0], &sha256_hashInit[0], sizeof(ctx->sha_H)); -+ ctx->sha_blocks = 0; -+ ctx->sha_bufCnt = 0; -+} -+ -+#define S(x,y) (((y) >> (x)) | ((y) << (32 - (x)))) -+#define uSig0(x) ((S(2,(x))) ^ (S(13,(x))) ^ (S(22,(x)))) -+#define uSig1(x) ((S(6,(x))) ^ (S(11,(x))) ^ (S(25,(x)))) -+#define lSig0(x) ((S(7,(x))) ^ (S(18,(x))) ^ (R(3,(x)))) -+#define lSig1(x) ((S(17,(x))) ^ (S(19,(x))) ^ (R(10,(x)))) -+ -+static void sha256_transform(sha256_context *ctx, const unsigned char *datap) -+{ -+ register int j; -+ u_int32_t a, b, c, d, e, f, g, h; -+ u_int32_t T1, T2, W[64], Wm2, Wm15; -+ -+ /* read the data, big endian byte order */ -+ j = 0; -+ do { -+ W[j] = (((u_int32_t)(datap[0]))<<24) | (((u_int32_t)(datap[1]))<<16) | -+ (((u_int32_t)(datap[2]))<<8 ) | ((u_int32_t)(datap[3])); -+ datap += 4; -+ } while(++j < 16); -+ -+ /* initialize variables a...h */ -+ a = ctx->sha_H[0]; -+ b = ctx->sha_H[1]; -+ c = ctx->sha_H[2]; -+ d = ctx->sha_H[3]; -+ e = ctx->sha_H[4]; -+ f = ctx->sha_H[5]; -+ g = ctx->sha_H[6]; -+ h = ctx->sha_H[7]; -+ -+ /* apply compression function */ -+ j = 0; -+ do { -+ if(j >= 16) { -+ Wm2 = W[j - 2]; -+ Wm15 = W[j - 15]; -+ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16]; -+ } -+ T1 = h + uSig1(e) + Ch(e,f,g) + sha256_K[j] + W[j]; -+ T2 = uSig0(a) + Maj(a,b,c); -+ h = g; g = f; f = e; -+ e = d + T1; -+ d = c; c = b; b = a; -+ a = T1 + T2; -+ } while(++j < 64); -+ -+ /* compute intermediate hash value */ -+ ctx->sha_H[0] += a; -+ ctx->sha_H[1] += b; -+ ctx->sha_H[2] += c; -+ ctx->sha_H[3] += d; -+ ctx->sha_H[4] += e; -+ ctx->sha_H[5] += f; -+ ctx->sha_H[6] += g; -+ ctx->sha_H[7] += h; -+ -+ ctx->sha_blocks++; -+} -+ -+void sha256_write(sha256_context *ctx, const unsigned char *datap, int length) -+{ -+ while(length > 0) { -+ if(!ctx->sha_bufCnt) { -+ while(length >= sizeof(ctx->sha_out)) { -+ sha256_transform(ctx, datap); -+ datap += sizeof(ctx->sha_out); -+ length -= sizeof(ctx->sha_out); -+ } -+ if(!length) return; -+ } -+ ctx->sha_out[ctx->sha_bufCnt] = *datap++; -+ length--; -+ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) { -+ sha256_transform(ctx, &ctx->sha_out[0]); -+ ctx->sha_bufCnt = 0; -+ } -+ } -+} -+ -+void sha256_final(sha256_context *ctx) -+{ -+ register int j; -+ u_int64_t bitLength; -+ u_int32_t i; -+ unsigned char padByte, *datap; -+ -+ bitLength = (ctx->sha_blocks << 9) | (ctx->sha_bufCnt << 3); -+ padByte = 0x80; -+ sha256_write(ctx, &padByte, 1); -+ -+ /* pad extra space with zeroes */ -+ padByte = 0; -+ while(ctx->sha_bufCnt != 56) { -+ sha256_write(ctx, &padByte, 1); -+ } -+ -+ /* write bit length, big endian byte order */ -+ ctx->sha_out[56] = bitLength >> 56; -+ ctx->sha_out[57] = bitLength >> 48; -+ ctx->sha_out[58] = bitLength >> 40; -+ ctx->sha_out[59] = bitLength >> 32; -+ ctx->sha_out[60] = bitLength >> 24; -+ ctx->sha_out[61] = bitLength >> 16; -+ ctx->sha_out[62] = bitLength >> 8; -+ ctx->sha_out[63] = bitLength; -+ sha256_transform(ctx, &ctx->sha_out[0]); -+ -+ /* return results in ctx->sha_out[0...31] */ -+ datap = &ctx->sha_out[0]; -+ j = 0; -+ do { -+ i = ctx->sha_H[j]; -+ datap[0] = i >> 24; -+ datap[1] = i >> 16; -+ datap[2] = i >> 8; -+ datap[3] = i; -+ datap += 4; -+ } while(++j < 8); -+ -+ /* clear sensitive information */ -+ memset(&ctx->sha_out[32], 0, sizeof(sha256_context) - 32); -+} -+ -+void sha256_hash_buffer(const unsigned char *ib, size_t ile, unsigned char *ob, size_t ole) -+{ -+ sha256_context ctx; -+ -+ if(ole < 1) return; -+ memset(ob, 0, ole); -+ if(ole > 32) ole = 32; -+ sha256_init(&ctx); -+ sha256_write(&ctx, ib, ile); -+ sha256_final(&ctx); -+ memcpy(ob, &ctx.sha_out[0], ole); -+ memset(&ctx, 0, sizeof(ctx)); -+} -+ -+#endif -+ -+#if defined(SHA512_NEEDED) -+void sha512_init(sha512_context *ctx) -+{ -+ memcpy(&ctx->sha_H[0], &sha512_hashInit[0], sizeof(ctx->sha_H)); -+ ctx->sha_blocks = 0; -+ ctx->sha_blocksMSB = 0; -+ ctx->sha_bufCnt = 0; -+} -+#endif -+ -+#if defined(SHA512_NEEDED) || defined(SHA384_NEEDED) -+#undef S -+#undef uSig0 -+#undef uSig1 -+#undef lSig0 -+#undef lSig1 -+#define S(x,y) (((y) >> (x)) | ((y) << (64 - (x)))) -+#define uSig0(x) ((S(28,(x))) ^ (S(34,(x))) ^ (S(39,(x)))) -+#define uSig1(x) ((S(14,(x))) ^ (S(18,(x))) ^ (S(41,(x)))) -+#define lSig0(x) ((S(1,(x))) ^ (S(8,(x))) ^ (R(7,(x)))) -+#define lSig1(x) ((S(19,(x))) ^ (S(61,(x))) ^ (R(6,(x)))) -+ -+static void sha512_transform(sha512_context *ctx, const unsigned char *datap) -+{ -+ register int j; -+ u_int64_t a, b, c, d, e, f, g, h; -+ u_int64_t T1, T2, W[80], Wm2, Wm15; -+ -+ /* read the data, big endian byte order */ -+ j = 0; -+ do { -+ W[j] = (((u_int64_t)(datap[0]))<<56) | (((u_int64_t)(datap[1]))<<48) | -+ (((u_int64_t)(datap[2]))<<40) | (((u_int64_t)(datap[3]))<<32) | -+ (((u_int64_t)(datap[4]))<<24) | (((u_int64_t)(datap[5]))<<16) | -+ (((u_int64_t)(datap[6]))<<8 ) | ((u_int64_t)(datap[7])); -+ datap += 8; -+ } while(++j < 16); -+ -+ /* initialize variables a...h */ -+ a = ctx->sha_H[0]; -+ b = ctx->sha_H[1]; -+ c = ctx->sha_H[2]; -+ d = ctx->sha_H[3]; -+ e = ctx->sha_H[4]; -+ f = ctx->sha_H[5]; -+ g = ctx->sha_H[6]; -+ h = ctx->sha_H[7]; -+ -+ /* apply compression function */ -+ j = 0; -+ do { -+ if(j >= 16) { -+ Wm2 = W[j - 2]; -+ Wm15 = W[j - 15]; -+ W[j] = lSig1(Wm2) + W[j - 7] + lSig0(Wm15) + W[j - 16]; -+ } -+ T1 = h + uSig1(e) + Ch(e,f,g) + sha512_K[j] + W[j]; -+ T2 = uSig0(a) + Maj(a,b,c); -+ h = g; g = f; f = e; -+ e = d + T1; -+ d = c; c = b; b = a; -+ a = T1 + T2; -+ } while(++j < 80); -+ -+ /* compute intermediate hash value */ -+ ctx->sha_H[0] += a; -+ ctx->sha_H[1] += b; -+ ctx->sha_H[2] += c; -+ ctx->sha_H[3] += d; -+ ctx->sha_H[4] += e; -+ ctx->sha_H[5] += f; -+ ctx->sha_H[6] += g; -+ ctx->sha_H[7] += h; -+ -+ ctx->sha_blocks++; -+ if(!ctx->sha_blocks) ctx->sha_blocksMSB++; -+} -+ -+void sha512_write(sha512_context *ctx, const unsigned char *datap, int length) -+{ -+ while(length > 0) { -+ if(!ctx->sha_bufCnt) { -+ while(length >= sizeof(ctx->sha_out)) { -+ sha512_transform(ctx, datap); -+ datap += sizeof(ctx->sha_out); -+ length -= sizeof(ctx->sha_out); -+ } -+ if(!length) return; -+ } -+ ctx->sha_out[ctx->sha_bufCnt] = *datap++; -+ length--; -+ if(++ctx->sha_bufCnt == sizeof(ctx->sha_out)) { -+ sha512_transform(ctx, &ctx->sha_out[0]); -+ ctx->sha_bufCnt = 0; -+ } -+ } -+} -+ -+void sha512_final(sha512_context *ctx) -+{ -+ register int j; -+ u_int64_t bitLength, bitLengthMSB; -+ u_int64_t i; -+ unsigned char padByte, *datap; -+ -+ bitLength = (ctx->sha_blocks << 10) | (ctx->sha_bufCnt << 3); -+ bitLengthMSB = (ctx->sha_blocksMSB << 10) | (ctx->sha_blocks >> 54); -+ padByte = 0x80; -+ sha512_write(ctx, &padByte, 1); -+ -+ /* pad extra space with zeroes */ -+ padByte = 0; -+ while(ctx->sha_bufCnt != 112) { -+ sha512_write(ctx, &padByte, 1); -+ } -+ -+ /* write bit length, big endian byte order */ -+ ctx->sha_out[112] = bitLengthMSB >> 56; -+ ctx->sha_out[113] = bitLengthMSB >> 48; -+ ctx->sha_out[114] = bitLengthMSB >> 40; -+ ctx->sha_out[115] = bitLengthMSB >> 32; -+ ctx->sha_out[116] = bitLengthMSB >> 24; -+ ctx->sha_out[117] = bitLengthMSB >> 16; -+ ctx->sha_out[118] = bitLengthMSB >> 8; -+ ctx->sha_out[119] = bitLengthMSB; -+ ctx->sha_out[120] = bitLength >> 56; -+ ctx->sha_out[121] = bitLength >> 48; -+ ctx->sha_out[122] = bitLength >> 40; -+ ctx->sha_out[123] = bitLength >> 32; -+ ctx->sha_out[124] = bitLength >> 24; -+ ctx->sha_out[125] = bitLength >> 16; -+ ctx->sha_out[126] = bitLength >> 8; -+ ctx->sha_out[127] = bitLength; -+ sha512_transform(ctx, &ctx->sha_out[0]); -+ -+ /* return results in ctx->sha_out[0...63] */ -+ datap = &ctx->sha_out[0]; -+ j = 0; -+ do { -+ i = ctx->sha_H[j]; -+ datap[0] = i >> 56; -+ datap[1] = i >> 48; -+ datap[2] = i >> 40; -+ datap[3] = i >> 32; -+ datap[4] = i >> 24; -+ datap[5] = i >> 16; -+ datap[6] = i >> 8; -+ datap[7] = i; -+ datap += 8; -+ } while(++j < 8); -+ -+ /* clear sensitive information */ -+ memset(&ctx->sha_out[64], 0, sizeof(sha512_context) - 64); -+} -+ -+void sha512_hash_buffer(const unsigned char *ib, size_t ile, unsigned char *ob, size_t ole) -+{ -+ sha512_context ctx; -+ -+ if(ole < 1) return; -+ memset(ob, 0, ole); -+ if(ole > 64) ole = 64; -+ sha512_init(&ctx); -+ sha512_write(&ctx, ib, ile); -+ sha512_final(&ctx); -+ memcpy(ob, &ctx.sha_out[0], ole); -+ memset(&ctx, 0, sizeof(ctx)); -+} -+#endif -+ -+#if defined(SHA384_NEEDED) -+void sha384_init(sha512_context *ctx) -+{ -+ memcpy(&ctx->sha_H[0], &sha384_hashInit[0], sizeof(ctx->sha_H)); -+ ctx->sha_blocks = 0; -+ ctx->sha_blocksMSB = 0; -+ ctx->sha_bufCnt = 0; -+} -+ -+void sha384_hash_buffer(const unsigned char *ib, size_t ile, unsigned char *ob, size_t ole) -+{ -+ sha512_context ctx; -+ -+ if(ole < 1) return; -+ memset(ob, 0, ole); -+ if(ole > 48) ole = 48; -+ sha384_init(&ctx); -+ sha512_write(&ctx, ib, ile); -+ sha512_final(&ctx); -+ memcpy(ob, &ctx.sha_out[0], ole); -+ memset(&ctx, 0, sizeof(ctx)); -+} -+#endif -Index: util-linux-2.20-rc2/mount/sha512.h -=================================================================== ---- /dev/null -+++ util-linux-2.20-rc2/mount/sha512.h -@@ -0,0 +1,45 @@ -+/* -+ * sha512.h -+ * -+ * Written by Jari Ruusu, April 16 2001 -+ * -+ * Copyright 2001 by Jari Ruusu. -+ * Redistribution of this file is permitted under the GNU Public License. -+ */ -+ -+#include -+ -+typedef struct { -+ unsigned char sha_out[64]; /* results are here, bytes 0...31 */ -+ u_int32_t sha_H[8]; -+ u_int64_t sha_blocks; -+ int sha_bufCnt; -+} sha256_context; -+ -+typedef struct { -+ unsigned char sha_out[128]; /* results are here, bytes 0...63 */ -+ u_int64_t sha_H[8]; -+ u_int64_t sha_blocks; -+ u_int64_t sha_blocksMSB; -+ int sha_bufCnt; -+} sha512_context; -+ -+/* no sha384_context, use sha512_context */ -+ -+/* 256 bit hash, provides 128 bits of security against collision attacks */ -+extern void sha256_init(sha256_context *); -+extern void sha256_write(sha256_context *, const unsigned char *, int); -+extern void sha256_final(sha256_context *); -+extern void sha256_hash_buffer(const unsigned char *, size_t, unsigned char *, size_t); -+ -+/* 512 bit hash, provides 256 bits of security against collision attacks */ -+extern void sha512_init(sha512_context *); -+extern void sha512_write(sha512_context *, const unsigned char *, int); -+extern void sha512_final(sha512_context *); -+extern void sha512_hash_buffer(const unsigned char *, size_t, unsigned char *, size_t); -+ -+/* 384 bit hash, provides 192 bits of security against collision attacks */ -+extern void sha384_init(sha512_context *); -+/* no sha384_write(), use sha512_write() */ -+/* no sha384_final(), use sha512_final(), result in ctx->sha_out[0...47] */ -+extern void sha384_hash_buffer(const unsigned char *, size_t, unsigned char *, size_t); diff --git a/util-linux-2.20.1.tar.bz2 b/util-linux-2.20.1.tar.bz2 deleted file mode 100644 index 0da3679..0000000 --- a/util-linux-2.20.1.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d16ebcda3e64ab88ed363d9c1242cdb7ccfd5e1f56c83d0c3b0638c23793bbe0 -size 4614302 diff --git a/util-linux-2.21-rc2.tar.bz2 b/util-linux-2.21-rc2.tar.bz2 new file mode 100644 index 0000000..bd03347 --- /dev/null +++ b/util-linux-2.21-rc2.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc3973b2ebbeebe33f2bedaa00c16adae281a7f1671def7f08b3a1c6ec9eaecb +size 4676787 diff --git a/util-linux-dmesg-fix-printing-of-multibyte-characters.patch b/util-linux-dmesg-fix-printing-of-multibyte-characters.patch deleted file mode 100644 index 00913de..0000000 --- a/util-linux-dmesg-fix-printing-of-multibyte-characters.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 131b477b61c7eb82aef913bae5aec63f019b7076 Mon Sep 17 00:00:00 2001 -From: Petr Uzel -Date: Tue, 1 Nov 2011 16:17:57 +0100 -Subject: [PATCH] dmesg: fix printing of multibyte characters - -Also make it compile if HAVE_WIDECHAR is not defined. - -Addresses: https://bugzilla.novell.com/show_bug.cgi?id=725993 -Reported-by: Harald Koenig -Signed-off-by: Petr Uzel ---- - sys-utils/dmesg.c | 16 ++++++++-------- - 1 files changed, 8 insertions(+), 8 deletions(-) - -Index: util-linux-2.20.1/sys-utils/dmesg.c -=================================================================== ---- util-linux-2.20.1.orig/sys-utils/dmesg.c -+++ util-linux-2.20.1/sys-utils/dmesg.c -@@ -391,10 +391,11 @@ static void safe_fwrite(const char *buf, - for (i = 0; i < size; i++) { - const char *p = buf + i; - int rc, hex = 0; -+ size_t len = 1; - - #ifdef HAVE_WIDECHAR - wchar_t wc; -- size_t len = mbrtowc(&wc, p, size - i, &s); -+ len = mbrtowc(&wc, p, size - i, &s); - - if (len == 0) /* L'\0' */ - return; -@@ -402,16 +403,15 @@ static void safe_fwrite(const char *buf, - if (len == (size_t)-1 || len == (size_t)-2) { /* invalid sequence */ - memset(&s, 0, sizeof (s)); - len = hex = 1; -- - } else if (len > 1 && !iswprint(wc)) { /* non-printable multibyte */ - hex = 1; -- } else --#endif -- { -+ } -+ i += len - 1; -+#else - if (!isprint((unsigned int) *p) && - !isspace((unsigned int) *p)) /* non-printable */ - hex = 1; -- } -+#endif - if (hex) - rc = fwrite_hex(p, len, out); - else diff --git a/util-linux-rpmlintrc b/util-linux-rpmlintrc index 52ce686..81be4db 100644 --- a/util-linux-rpmlintrc +++ b/util-linux-rpmlintrc @@ -1,4 +1,7 @@ addFilter("init-script-without-%stop_on_removal-preun /etc/init.d/raw") +addFilter("init-script-without-%restart_on_update-postun /etc/init.d/raw") addFilter("incoherent-init-script-name raw") addFilter("no-reload-entry /etc/init.d/raw") +# There is no egrep(1) used -> False positive +addFilter("deprecated-grep") diff --git a/util-linux.changes b/util-linux.changes index c318af8..34fed40 100644 --- a/util-linux.changes +++ b/util-linux.changes @@ -1,3 +1,63 @@ +------------------------------------------------------------------- +Tue Feb 21 13:46:25 UTC 2012 - puzel@suse.com + +- update to util-linux-2.21-rc2 + chcpu(8): + - new command + prlimit(1): + - new command + losetup(8): + - the command has been rewritten, features: + * supports 64bit ioctls only + * losetup -a does not require root permissions + * uses new /dev/loop-control kernel API + * supports new command line option --partscan to enable + kernel partition table parser + agetty(8): + - supports new command line options --nohints to disable hints + about Num, Caps and Scroll Locks + - supports new command line option --remote to add a hostname + to the login(1) command line + dmesg(1): + - supports new command line options --file to read the log from + a file rather than from kernel buffer + fallocate(8): + - supports new command line options --punch-hole to punch holes + in the file + findmnt(8): + - supports alternative location of the fstab file + ipcrm(8): + - supports new command line option --all to remove all resources + lscpu(1): + - supports new command line options --all, --offline and + --online to list all, offline or online CPUs + - supports s390 topology description (polarization, books, ...) + partx(8): + - supports partitioned loop devices + wipefs(8): + - allows to zap partition tables + - supports new command line option "--type " to wipe only + specified filesystems, RAIDs or partition table types + libblkid: + - provides new function blkid_do_wipe() to remove all + signatures from the given block device. +- disable elvtune (works only with 2.4 kernel) +- drop patches which are upstream now: + - drop fsck-use-FS-blacklist-for-non-all-mode-too.patch + - drop util-linux-dmesg-fix-printing-of-multibyte-characters.patch + - libmount-ignore-tailing-slash-in-netfs-source-paths.patch + - libmount-fix-chdir-to-parent-for-restricted-user-umo.patch +- add fix-ac-init.patch (fixes build) +- add build-sys-fix-building-of-wall.patch +- add cytune-fix-manpage-formatting.patch +- update to adjtimex-1.29 +- use fdupes to symlink duplicate manpages +- disabled make check for time (noop) +- libraries back to %{_libdir}, /usr merge project (by + crrodriguez@opensuse.org) +- drop cryptoloop support (provided by dm-crypt) + - util-linux-2.17.1-mount_losetup_crypto.patch + ------------------------------------------------------------------- Tue Feb 7 14:48:23 UTC 2012 - jengelh@medozas.de diff --git a/util-linux.spec b/util-linux.spec index a1aff6c..c5bd1fd 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -15,12 +15,16 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + %define time_ver 1.7 %define which_ver 2.20 -%define adjtimex_ver 1.28 +%define adjtimex_ver 1.29 + +%define tar_ver 2.21-rc2 Name: util-linux BuildRequires: audit-devel +BuildRequires: fdupes BuildRequires: gettext-devel BuildRequires: libselinux-devel BuildRequires: libsepol-devel @@ -30,7 +34,7 @@ BuildRequires: pam-devel BuildRequires: pkg-config BuildRequires: readline-devel BuildRequires: zlib-devel -Version: 2.20.1 +Version: 2.20.92 Release: 0 # util-linux is a base package and uuidd pre-requiring pwdutils pulls # that into the core build cycle. pwdutils also pulls in the whole @@ -48,7 +52,7 @@ Recommends: %{name}-lang = %{version} Summary: A collection of basic system utilities License: GPL-2.0+ Group: System/Base -Source: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v20/%{name}-%{version}.tar.bz2 +Source: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v21/%{name}-%{tar_ver}.tar.bz2 Source1: util-linux-rpmlintrc # XXX: make nologin part of login package Source2: nologin.c @@ -56,11 +60,9 @@ Source3: nologin.8 Source4: raw.init Source5: etc.raw Source6: etc_filesystems -# XXX: add libmnt Source7: baselibs.conf -# XXX: post upstream? -Source9: adjtimex-%{adjtimex_ver}.tar.bz2 -# XXX: post upstream? +# TODO: split to separate package +Source9: http://ftp.debian.org/debian/pool/main/a/adjtimex/adjtimex_%{adjtimex_ver}.orig.tar.gz Source11: klogconsole.tar.bz2 # TODO: split to separate package Source12: which-%{which_ver}.tar.bz2 @@ -83,14 +85,11 @@ Source51: blkid.conf ## # 241372 - remove legacy warnings from fdisk Patch1: util-linux-2.12r-fdisk_remove_bogus_warnings.patch -# crypto patch -Patch2: util-linux-2.17.1-mount_losetup_crypto.patch -Patch5: util-linux-2.20-libmount-deps.patch -Patch6: util-linux-dmesg-fix-printing-of-multibyte-characters.patch -Patch7: fsck-use-FS-blacklist-for-non-all-mode-too.patch -Patch8: libmount-ignore-tailing-slash-in-netfs-source-paths.patch -Patch9: libmount-fix-chdir-to-parent-for-restricted-user-umo.patch -Patch10: fdisk-tinfo.patch +Patch2: util-linux-2.20-libmount-deps.patch +Patch3: fdisk-tinfo.patch +Patch4: fix-ac-init.patch +Patch5: build-sys-fix-building-of-wall.patch +Patch6: cytune-fix-manpage-formatting.patch ## ## adjtimex @@ -183,15 +182,13 @@ Files to develop applications using the libmount library. %lang_package %prep -%setup -q -a 9 -b 11 -b 12 -b 13 +%setup -q -n %{name}-%{tar_ver} -a 9 -b 11 -b 12 -b 13 %patch1 -p1 %patch2 -p1 +%patch3 -p1 +%patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 # cd adjtimex-* @@ -226,7 +223,6 @@ make %{?_smp_mflags} cd .. # time build cd time-%{time_ver} -%{?suse_update_config:%{suse_update_config}} export CFLAGS="%{optflags} -D_GNU_SOURCE " export INSTALL_PROGRAM='$(INSTALL)' %configure @@ -249,10 +245,8 @@ export SUID_LDFLAGS="-pie" %configure \ --bindir=/bin \ --sbindir=/sbin \ - --libdir=/%{_lib} \ --with-audit \ --with-selinux \ - --enable-elvtune \ --enable-mesg \ --enable-partx \ --enable-raw \ @@ -263,17 +257,14 @@ export SUID_LDFLAGS="-pie" --disable-mountpoint \ --disable-use-tty-group \ --disable-static \ - --disable-silent-rules --disable-rpath + --disable-silent-rules \ + --disable-rpath # make %{?_smp_mflags} # -%{__cc} %{optflags} -o nologin nologin.c -%{__cc} %{optflags} -o mkzimage_cmdline %{S:29} -%{__cc} %{optflags} -o chrp-addnote %{SOURCE31} - -%check -cd ../time-%{time_ver} -make check +%{__cc} -fwhole-program %{optflags} -o nologin nologin.c +%{__cc} -fwhole-program %{optflags} -o mkzimage_cmdline %{S:29} +%{__cc} -fwhole-program %{optflags} -o chrp-addnote %{SOURCE31} %install mkdir -p %{buildroot}{/etc/init.d,%{_mandir}/man{1,8},/bin,/sbin,/usr/bin,/usr/sbin,%{_infodir}} @@ -380,6 +371,8 @@ find %{buildroot}%{_mandir}/man8 -regextype posix-egrep \ touch %{buildroot}%{_localstatedir}/lib/libuuid/clock.txt # rcuuidd helper ln -sf ../..%{_sysconfdir}/init.d/uuidd %{buildroot}%{_sbindir}/rcuuidd +# remove duplicate manpages +%fdupes -s %{buildroot}/%{_mandir} %post %{fillup_and_insserv raw} @@ -445,12 +438,21 @@ fi %files -f %{name}.files # Common files for all archs %defattr(-,root,root) -%doc login-utils/README.poeigl -%doc misc-utils/README.cal -%doc mount/README.mount -%doc hwclock/README.hwclock -%doc text-utils/README.col -%doc README.largedisk +# util-linux documentation files +%doc Documentation/blkid.txt +%doc Documentation/cal.txt +%doc Documentation/cfdisk.txt +%doc Documentation/col.txt +%doc Documentation/ddate.txt +%doc Documentation/deprecated.txt +%doc Documentation/fdisk.txt +%doc Documentation/getopt.txt +%doc Documentation/howto-debug.txt +%doc Documentation/hwclock.txt +%doc Documentation/modems-with-agetty.txt +%doc Documentation/mount.txt +%doc Documentation/pg.txt +%doc Documentation/sfdisk.txt %config %attr(744,root,root) %{_sysconfdir}/init.d/raw %config(noreplace) %attr(644,root,root) %{_sysconfdir}/raw %config(noreplace) %{_sysconfdir}/filesystems @@ -464,7 +466,6 @@ fi /sbin/adjtimex /sbin/agetty /sbin/blockdev -/sbin/elvtune /sbin/ctrlaltdel /sbin/fsck.minix /sbin/fsck.cramfs @@ -487,6 +488,7 @@ fi /sbin/fsfreeze /sbin/swaplabel /sbin/fstrim +/sbin/chcpu %{_bindir}/ipcmk /bin/logger %{_bindir}/cal @@ -515,6 +517,7 @@ fi %{_bindir}/mkzimage_cmdline %endif %{_bindir}/namei +%{_bindir}/prlimit %{_bindir}/rename %{_bindir}/renice %{_bindir}/rev @@ -567,7 +570,7 @@ fi %{_mandir}/man1/more.1.gz %{_mandir}/man1/namei.1.gz %{_mandir}/man1/ionice.1.gz -%{_mandir}/man1/readprofile.1.gz +%{_mandir}/man1/prlimit.1.gz %{_mandir}/man1/rename.1.gz %{_mandir}/man1/rev.1.gz %{_mandir}/man1/renice.1.gz @@ -590,7 +593,6 @@ fi %{_mandir}/man8/agetty.8.gz %{_mandir}/man8/blockdev.8.gz %{_mandir}/man8/delpart.8.gz -%{_mandir}/man8/elvtune.8* %{_mandir}/man8/ctrlaltdel.8.gz %{_mandir}/man8/adjtimex.8.gz %{_mandir}/man8/blkid.8.gz @@ -610,6 +612,8 @@ fi %{_mandir}/man8/findmnt.8.gz %{_mandir}/man8/fsfreeze.8.gz %{_mandir}/man8/swaplabel.8.gz +%{_mandir}/man8/readprofile.8.gz +%{_mandir}/man8/chcpu.8.gz %ifnarch ppc ppc64 %{_mandir}/man8/mkzimage_cmdline.8.gz %endif @@ -632,12 +636,12 @@ fi %attr (755,root,root) %{_datadir}/getopt/getopt-parse.bash %attr (755,root,root) %{_datadir}/getopt/getopt-parse.tcsh %ifnarch ia64 -%doc fdisk/README.fdisk +#XXX: post our patches upstream +#XXX: call fdupes on /usr/share/man /sbin/fdisk %{_mandir}/man8/fdisk.8.gz %endif %ifnarch %sparc ia64 -%doc fdisk/README.cfdisk %{_mandir}/man8/cfdisk.8.gz %{_mandir}/man8/sfdisk.8.gz /sbin/cfdisk @@ -659,8 +663,8 @@ fi %files -n libblkid1 %defattr(-, root, root) -/%{_lib}/libblkid.so.1 -/%{_lib}/libblkid.so.1.* +/%{_libdir}/libblkid.so.1 +/%{_libdir}/libblkid.so.1.* %files -n libblkid-devel %defattr(-, root, root) @@ -672,8 +676,8 @@ fi %files -n libmount1 %defattr(-, root, root) -/%{_lib}/libmount.so.1 -/%{_lib}/libmount.so.1.* +/%{_libdir}/libmount.so.1 +/%{_libdir}/libmount.so.1.* %files -n libmount-devel %defattr(-, root, root) @@ -688,14 +692,14 @@ fi %attr(-,uuidd,uuidd) %dir %{_localstatedir}/lib/libuuid %ghost %{_localstatedir}/lib/libuuid/clock.txt %attr(-,uuidd,uuidd) %ghost %dir %{_localstatedir}/run/uuidd -%{_sysconfdir}/init.d/uuidd +%{_initddir}/uuidd %{_mandir}/man8/uuidd.8.gz %{_sbindir}/rcuuidd %files -n libuuid1 %defattr(-, root, root) -/%{_lib}/libuuid.so.1 -/%{_lib}/libuuid.so.1.* +/%{_libdir}/libuuid.so.1 +/%{_libdir}/libuuid.so.1.* %files -n libuuid-devel %defattr(-, root, root)