diff options
-rw-r--r-- | mount.cifs.c | 2 | ||||
-rw-r--r-- | mount.h | 1 | ||||
-rw-r--r-- | mtab.c | 16 |
3 files changed, 18 insertions, 1 deletions
diff --git a/mount.cifs.c b/mount.cifs.c index f537a07..5f29761 100644 --- a/mount.cifs.c +++ b/mount.cifs.c @@ -1934,7 +1934,7 @@ mount_retry: goto mount_exit; } - if (!parsed_info->nomtab) + if (!parsed_info->nomtab && !mtab_unusable()) rc = add_mtab(orig_dev, mountpoint, parsed_info->flags, fstype); mount_exit: @@ -32,6 +32,7 @@ #define _PATH_MOUNTED_LOCK _PATH_MOUNTED "~" #define _PATH_MOUNTED_TMP _PATH_MOUNTED ".tmp" +extern int mtab_unusable(void); extern int lock_mtab(void); extern void unlock_mtab(void); @@ -77,6 +77,22 @@ mono_time(void) { return ret; } +/* + * See if mtab is present and whether it's a symlink. Returns errno from stat() + * call or EMLINK if it's a symlink. + */ +int +mtab_unusable(void) +{ + struct stat mstat; + + if(lstat(_PATH_MOUNTED, &mstat)) + return errno; + else if (S_ISLNK(mstat.st_mode)) + return EMLINK; + return 0; +} + /* Remove lock file. */ void unlock_mtab (void) { |