diff options
Diffstat (limited to 'lib/mount_util.c')
-rw-r--r-- | lib/mount_util.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/mount_util.c b/lib/mount_util.c index 9926fe8..dbf9219 100644 --- a/lib/mount_util.c +++ b/lib/mount_util.c @@ -50,11 +50,22 @@ static int mtab_needs_update(const char *mnt) if (errno == ENOENT) return 0; } else { + uid_t ruid; + int err; + if (S_ISLNK(stbuf.st_mode)) return 0; + ruid = getuid(); + if (ruid != 0) + setreuid(0, -1); + res = access(_PATH_MOUNTED, W_OK); - if (res == -1 && errno == EROFS) + err = (res == -1) ? errno : 0; + if (ruid != 0) + setreuid(ruid, -1); + + if (err == EROFS) return 0; } |