Hello community, here is the log from the commit of package util-linux for openSUSE:Factory checked in at 2011-11-10 16:06:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/util-linux (Old) and /work/SRC/openSUSE:Factory/.util-linux.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "util-linux", Maintainer is "pu...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/util-linux/util-linux.changes 2011-11-08 17:54:50.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.util-linux.new/util-linux.changes 2011-11-10 16:06:48.000000000 +0100 @@ -1,0 +2,7 @@ +Wed Nov 9 08:27:17 UTC 2011 - pu...@suse.com + +- add libmount-ignore-tailing-slash-in-netfs-source-paths.patch and + libmount-fix-chdir-to-parent-for-restricted-user-umo.patch: + fix umounting network filesystems as plain user (bnc#728480) + +------------------------------------------------------------------- New: ---- libmount-fix-chdir-to-parent-for-restricted-user-umo.patch libmount-ignore-tailing-slash-in-netfs-source-paths.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ util-linux.spec ++++++ --- /var/tmp/diff_new_pack.DlJzoU/_old 2011-11-10 16:06:50.000000000 +0100 +++ /var/tmp/diff_new_pack.DlJzoU/_new 2011-11-10 16:06:50.000000000 +0100 @@ -89,6 +89,8 @@ 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 ## ## adjtimex @@ -193,6 +195,8 @@ %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 +%patch9 -p1 # cd adjtimex-* ++++++ libmount-fix-chdir-to-parent-for-restricted-user-umo.patch ++++++ >From 6107377322d5d6866c3aa363def656fdf68311e6 Mon Sep 17 00:00:00 2001 From: Karel Zak <k...@redhat.com> Date: Tue, 8 Nov 2011 21:47:23 +0100 Subject: [PATCH] libmount: fix chdir to parent for restricted (user) umounts Reported-by: Petr Uzel <petr.u...@suse.cz> Signed-off-by: Karel Zak <k...@redhat.com> Signed-off-by: Petr Uzel <petr.u...@suse.cz> --- 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; } ++++++ libmount-ignore-tailing-slash-in-netfs-source-paths.patch ++++++ >From b106d052383083b80c0dc41f1555d2661db00374 Mon Sep 17 00:00:00 2001 From: Petr Uzel <petr.u...@suse.cz> 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 <petr.u...@suse.cz> Signed-off-by: Karel Zak <k...@redhat.com> --- 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 <stddef.h> #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 <blkid.h> #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); } } -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org