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]

Reply via email to