]> granicus.if.org Git - sudo/commitdiff
Enable tty_is_devpts() support for Solaris with the "devices" filesystem.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 2 Jun 2010 18:30:13 +0000 (14:30 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 2 Jun 2010 18:30:13 +0000 (14:30 -0400)
plugins/sudoers/check.c

index 3d9d79c98303b53e95836c698f04eabd9e460787..847fff129f657a8bdf824dbbf2852cd705624514 100644 (file)
@@ -28,6 +28,9 @@
 #ifdef __linux__
 #include <sys/vfs.h>
 #endif
+#if defined(__sun) && defined(__SVR4)
+#include <sys/statvfs.h>
+#endif
 #ifndef __TANDEM
 # include <sys/file.h>
 #endif
@@ -663,7 +666,7 @@ remove_timestamp(int remove)
 }
 
 /*
- * Returns TRUE if tty lives on a devpts filesystem, else FALSE.
+ * Returns TRUE if tty lives on a devpts or /devices filesystem, else FALSE.
  * Unlike most filesystems, the ctime of devpts nodes is not updated when
  * the device node is written to, only when the inode's status changes,
  * typically via the chmod, chown, link, rename, or utimes system calls.
@@ -685,6 +688,13 @@ tty_is_devpts(const char *tty)
        if (sfs.f_type == DEVPTS_SUPER_MAGIC)
            retval = TRUE;
     }
+#elif defined(__sun) && defined(__SVR4)
+    struct statvfs sfs;
+
+    if (statvfs(tty, &sfs) == 0) {
+       if (strcmp(sfs.f_fstr, "devices") == 0)
+           retval = TRUE;
+    }
 #endif /* __linux__ */
     return retval;
 }