mirror of
https://github.com/sudo-project/sudo.git
synced 2025-09-01 14:55:12 +00:00
Handle d_type == DT_UNKNOWN when resolving the device to a name and
sprinkle some more debugging.
This commit is contained in:
@@ -199,6 +199,9 @@ sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin)
|
|||||||
if (dir[0] == '\0' || (d = opendir(dir)) == NULL)
|
if (dir[0] == '\0' || (d = opendir(dir)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
sudo_debug_printf(SUDO_DEBUG_INFO, "scanning for dev %u in %s",
|
||||||
|
(unsigned int)rdev, dir);
|
||||||
|
|
||||||
sdlen = strlen(dir);
|
sdlen = strlen(dir);
|
||||||
if (dir[sdlen - 1] == '/')
|
if (dir[sdlen - 1] == '/')
|
||||||
sdlen--;
|
sdlen--;
|
||||||
@@ -246,7 +249,7 @@ sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin)
|
|||||||
# if defined(HAVE_STRUCT_DIRENT_D_TYPE) && defined(DTTOIF)
|
# if defined(HAVE_STRUCT_DIRENT_D_TYPE) && defined(DTTOIF)
|
||||||
/* Use d_type to avoid a stat() if possible. */
|
/* Use d_type to avoid a stat() if possible. */
|
||||||
/* Convert d_type to stat-style type bits but follow links. */
|
/* Convert d_type to stat-style type bits but follow links. */
|
||||||
if (dp->d_type != DT_LNK && dp->d_type != DT_CHR)
|
if (dp->d_type != DT_LNK && dp->d_type != DT_CHR && dp->d_type != DT_UNKNOWN)
|
||||||
sb.st_mode = DTTOIF(dp->d_type);
|
sb.st_mode = DTTOIF(dp->d_type);
|
||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
@@ -265,6 +268,8 @@ sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin)
|
|||||||
}
|
}
|
||||||
if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) {
|
if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) {
|
||||||
devname = estrdup(pathbuf);
|
devname = estrdup(pathbuf);
|
||||||
|
sudo_debug_printf(SUDO_DEBUG_INFO, "resolved dev %u as %s",
|
||||||
|
(unsigned int)rdev, pathbuf);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,6 +314,8 @@ sudo_ttyname_dev(dev_t rdev)
|
|||||||
if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev)
|
if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev)
|
||||||
tty = estrdup(buf);
|
tty = estrdup(buf);
|
||||||
}
|
}
|
||||||
|
sudo_debug_printf(SUDO_DEBUG_INFO, "comparing dev %u to %s: %s",
|
||||||
|
(unsigned int)rdev, buf, tty ? "yes" : "no");
|
||||||
} else {
|
} else {
|
||||||
/* Traverse directory */
|
/* Traverse directory */
|
||||||
tty = sudo_ttyname_scan(devname, rdev, true);
|
tty = sudo_ttyname_scan(devname, rdev, true);
|
||||||
|
Reference in New Issue
Block a user