Hello community, here is the log from the commit of package cifs-utils for openSUSE:11.4 checked in at Thu Mar 15 21:50:53 CET 2012.
-------- --- old-versions/11.4/UPDATES/all/cifs-utils/cifs-utils.changes 2012-02-22 14:42:06.000000000 +0100 +++ 11.4/cifs-utils/cifs-utils.changes 2012-03-09 10:05:03.000000000 +0100 @@ -1,0 +2,5 @@ +Thu Mar 8 20:12:19 CET 2012 - [email protected] + +- mount.cifs: Properly update mtab during remount; (bnc#747906). + +------------------------------------------------------------------- calling whatdependson for 11.4-i586 New: ---- mount.cifs-handle-errors-in-del_mtab.patch mount.cifs-properly-update-mtab.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cifs-utils.spec ++++++ --- /var/tmp/diff_new_pack.ebBGPV/_old 2012-03-15 21:50:32.000000000 +0100 +++ /var/tmp/diff_new_pack.ebBGPV/_new 2012-03-15 21:50:32.000000000 +0100 @@ -20,7 +20,7 @@ Name: cifs-utils Version: 4.9 -Release: 1.<RELEASE2> +Release: 1.<RELEASE5> License: GPLv3+ Group: System/Filesystems Url: http://www.samba.org/linux-cifs/cifs-utils/ @@ -28,6 +28,8 @@ Source1: cifs.init Source2: mkinitrd_scripts_boot-cifs.sh Source3: mkinitrd_scripts_setup-cifs.sh +Patch1: mount.cifs-properly-update-mtab.patch +Patch2: mount.cifs-handle-errors-in-del_mtab.patch %if 0%{?suse_version} PreReq: insserv %{?fillup_prereq} mkinitrd %else @@ -53,6 +55,8 @@ %prep %setup -q +%patch1 -p0 +%patch2 -p0 %build %{?suse_update_config:%{suse_update_config -f}} ++++++ mount.cifs-handle-errors-in-del_mtab.patch ++++++ commit 92be8b6775958814d39fb19247ff85947a2e4f9e Author: Jeff Layton <[email protected]> Date: Mon Jan 16 13:22:28 2012 -0500 mount.cifs: handle errors from rename() in del_mtab The new del_mtab code ignored errors from rename(). Make it handle that error as well like it does other errors. Fixes bnc#747906. Cc: Carlos Maiolino <[email protected]> Signed-off-by: Jeff Layton <[email protected]> --- mount.cifs.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) Index: mount.cifs.c =================================================================== --- mount.cifs.c.orig +++ mount.cifs.c @@ -1592,7 +1592,11 @@ del_mtab(char *mountpoint) endmntent(mntmtab); - rename(mtabtmpfile, MOUNTED); + if (rename(mtabtmpfile, MOUNTED)) { + fprintf(stderr, "del_mtab: error %d when renaming mtab in place\n", errno); + rc = EX_FILEIO; + goto del_mtab_error; + } del_mtab_exit: unlock_mtab(); ++++++ mount.cifs-properly-update-mtab.patch ++++++ commit f46dd7661cfb87257c95081fc2071c934bfbbb16 Author: Carlos Maiolino <[email protected]> Date: Mon, 16 Jan 2012 12:29:49 -0500 mount.cifs: Properly update mtab during remount During a remount of a cifs filesystem, the mtab file is not properly updated, which leads to a doubled entry of the same filesystem in the /etc/mtab file. This patch adds a new function del_mtab() which is called before the add_mtab() in case the fs is being remounted. The del_mtab() function will delete from the mtab, the old entry from the filesystem which is being remounted, and then, calls add_mtab() to add an updated entry to the mtab file. Fixes bnc#747906. Signed-off-by: Carlos Maiolino <[email protected]> --- mount.cifs.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 98 insertions(+), 1 deletions(-) Index: mount.cifs.c =================================================================== --- mount.cifs.c.orig +++ mount.cifs.c @@ -42,6 +42,7 @@ #include <fcntl.h> #include <limits.h> #include <paths.h> +#include <libgen.h> #include <sys/mman.h> #include <sys/wait.h> #ifdef HAVE_LIBCAP_NG @@ -159,6 +160,7 @@ #define OPT_NOMAND 28 #define OPT_CRUID 29 +#define MNT_TMP_FILE "/.mtab.cifs.XXXXXX" /* struct for holding parsed mount info for use by privleged process */ struct parsed_mount_info { @@ -1523,6 +1525,87 @@ add_mtab_exit: return rc; } +static int +del_mtab(char *mountpoint) +{ + int tmprc, rc = 0; + FILE *mnttmp, *mntmtab; + struct mntent *mountent; + char *mtabfile, *mtabdir, *mtabtmpfile; + + mtabfile = strdup(MOUNTED); + mtabdir = dirname(mtabfile); + mtabdir = realloc(mtabdir, strlen(mtabdir) + strlen(MNT_TMP_FILE) + 2); + if (!mtabdir) { + fprintf(stderr, "del_mtab: cannot determine current mtab path"); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + mtabtmpfile = strcat(mtabdir, MNT_TMP_FILE); + if (!mtabtmpfile) { + fprintf(stderr, "del_mtab: cannot allocate memory to tmp file"); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + atexit(unlock_mtab); + rc = lock_mtab(); + if (rc) { + fprintf(stderr, "del_mtab: cannot lock mtab"); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + mtabtmpfile = mktemp(mtabtmpfile); + if (!mtabtmpfile) { + fprintf(stderr, "del_mtab: cannot setup tmp file destination"); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + mntmtab = setmntent(MOUNTED, "r"); + if (!mntmtab) { + fprintf(stderr, "del_mtab: could not update mount table\n"); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + mnttmp = setmntent(mtabtmpfile, "w"); + if (!mnttmp) { + fprintf(stderr, "del_mtab: could not update mount table\n"); + endmntent(mntmtab); + rc = EX_FILEIO; + goto del_mtab_exit; + } + + while ((mountent = getmntent(mntmtab)) != NULL) { + if (!strcmp(mountent->mnt_dir, mountpoint)) + continue; + rc = addmntent(mnttmp, mountent); + if (rc) { + fprintf(stderr, "del_mtab: unable to add mount entry to mtab\n"); + rc = EX_FILEIO; + goto del_mtab_error; + } + } + + endmntent(mntmtab); + + rename(mtabtmpfile, MOUNTED); + +del_mtab_exit: + unlock_mtab(); + free(mtabdir); + return rc; + +del_mtab_error: + if (unlink(mtabtmpfile)) + fprintf(stderr, "del_mtab: failed to delete tmp file - %s\n", + strerror(errno)); + goto del_mtab_exit; +} + /* have the child drop root privileges */ static int drop_child_privs(void) @@ -1940,8 +2023,15 @@ mount_retry: } do_mtab: - if (!parsed_info->nomtab && !mtab_unusable()) + if (!parsed_info->nomtab && !mtab_unusable()) { + if (parsed_info->flags & MS_REMOUNT) { + rc = del_mtab(mountpoint); + if (rc) + goto mount_exit; + } + rc = add_mtab(orig_dev, mountpoint, parsed_info->flags, fstype); + } mount_exit: if (parsed_info) { continue with "q"... Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
