aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-02-10 07:35:05 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2005-02-10 07:35:05 +0000
commita71694156750f34959d65e2085794509a067df15 (patch)
treee26409c61d6fe54db7148077710b904e1f2f5f9e
parentfbb5c74c232cddfeeee113456427f079ad06bece (diff)
downloadlibfuse-a71694156750f34959d65e2085794509a067df15.tar.gz
fix
-rw-r--r--ChangeLog8
-rw-r--r--util/fusermount.c5
2 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index dff2600..b17a3b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-02-10 Miklos Szeredi <miklos@szeredi.hu>
+
+ * fusermount: set umask, otherwise /etc/mtab will have
+ unpredictable permission. Spotted by Jindrich Kolorenc
+
+ * fusermount: set owner and group of /etc/mtab to original values
+ on unmount
+
2005-02-07 Miklos Szeredi <miklos@szeredi.hu>
* Cleaned up directory reading (temporary file is not used)
diff --git a/util/fusermount.c b/util/fusermount.c
index 4f9ed2f..1b79446 100644
--- a/util/fusermount.c
+++ b/util/fusermount.c
@@ -240,6 +240,7 @@ static int unmount_rename(const char *mnt, int quiet, int lazy,
const char *mtab, const char *mtab_new)
{
int res;
+ struct stat sbuf;
if (getuid() != 0) {
res = drop_privs();
@@ -253,6 +254,9 @@ static int unmount_rename(const char *mnt, int quiet, int lazy,
if (getuid() != 0)
restore_privs();
+ if (stat(mtab, &sbuf) == 0)
+ chown(mtab_new, sbuf.st_uid, sbuf.st_gid);
+
res = rename(mtab_new, mtab);
if (res == -1) {
fprintf(stderr, "%s: failed to rename %s to %s: %s\n", progname,
@@ -1046,6 +1050,7 @@ int main(int argc, char *argv[])
if (getuid() != 0)
restore_privs();
+ umask(033);
if (unmount) {
if (geteuid() == 0) {
int mtablock = lock_mtab();