Date: Sun, 14 Oct 2007 14:50:05 GMT From: EugeneGrosbein@grosbein.pp.ru To: freebsd-bugs@FreeBSD.org Subject: Re: bin/116980: [patch] [msdosfs] mount_msdosfs(8) resets some flags for 'update' mount Message-ID: <200710141450.l9EEo5pB008886@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/116980; it has been noted by GNATS. From: EugeneGrosbein@grosbein.pp.ru To: bug-followup@freebsd.org Cc: Subject: Re: bin/116980: [patch] [msdosfs] mount_msdosfs(8) resets some flags for 'update' mount Date: Sun, 14 Oct 2007 22:48:55 +0800 Hi! Same patch, suitable for 7.0-PRERELEASE: --- sbin/mount_msdosfs/mount_msdosfs.c.orig 2007-01-29 08:49:08.000000000 +0700 +++ sbin/mount_msdosfs/mount_msdosfs.c 2007-10-14 18:37:08.000000000 +0800 @@ -69,7 +69,7 @@ struct iovec *iov = NULL; int iovlen = 0; struct stat sb; - int c, mntflags, set_gid, set_uid, set_mask, set_dirmask; + int c, mntflags, set_gid, set_uid, set_mask, set_dirmask, update = 0; char *dev, *dir, mntpath[MAXPATHLEN], *csp; char fstype[] = "msdosfs"; char errmsg[255] = {0}; @@ -134,6 +134,7 @@ *p = '\0'; val = p + 1; } + update = update || !strcmp(optarg, "update"); build_iovec(&iov, &iovlen, optarg, val, (size_t)-1); } break; @@ -166,13 +167,15 @@ if (optind + 2 != argc) usage(); - if (set_mask && !set_dirmask) { - dirmask = mask; - set_dirmask = 1; - } - else if (set_dirmask && !set_mask) { - mask = dirmask; - set_mask = 1; + if (!update) { + if (set_mask && !set_dirmask) { + dirmask = mask; + set_dirmask = 1; + } + else if (set_dirmask && !set_mask) { + mask = dirmask; + set_mask = 1; + } } dev = argv[optind]; @@ -196,27 +199,37 @@ (void)checkpath(dir, mntpath); (void)rmslashes(dev, dev); - if (!set_gid || !set_uid || !set_mask) { + if (!update && (!set_gid || !set_uid || !set_mask)) { if (stat(mntpath, &sb) == -1) err(EX_OSERR, "stat %s", mntpath); - - if (!set_uid) + if (!set_uid) { uid = sb.st_uid; - if (!set_gid) + set_uid = 1; + } + if (!set_gid) { gid = sb.st_gid; - if (!set_mask) + set_gid = 1; + } + if (!set_mask) { mask = dirmask = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); + set_mask = set_dirmask = 1; + } } build_iovec(&iov, &iovlen, "fstype", fstype, (size_t)-1); build_iovec(&iov, &iovlen, "fspath", mntpath, (size_t)-1); build_iovec(&iov, &iovlen, "from", dev, (size_t)-1); build_iovec(&iov, &iovlen, "errmsg", errmsg, sizeof(errmsg)); - build_iovec_argf(&iov, &iovlen, "uid", "%d", uid); - build_iovec_argf(&iov, &iovlen, "gid", "%u", gid); - build_iovec_argf(&iov, &iovlen, "mask", "%u", mask); - build_iovec_argf(&iov, &iovlen, "dirmask", "%u", dirmask); + + if (set_uid) + build_iovec_argf(&iov, &iovlen, "uid", "%d", uid); + if (set_gid) + build_iovec_argf(&iov, &iovlen, "gid", "%u", gid); + if (set_mask) + build_iovec_argf(&iov, &iovlen, "mask", "%u", mask); + if (set_dirmask) + build_iovec_argf(&iov, &iovlen, "dirmask", "%u", dirmask); if (nmount(iov, iovlen, mntflags) < 0) err(1, "%s: %s", dev, errmsg);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710141450.l9EEo5pB008886>