6767main (int argc , char * argv [])
6868{
6969 char * tty_libc = NULL , * tty_sudo = NULL ;
70- int ch , errors = 0 , ntests = 1 ;
7170 char pathbuf [PATH_MAX ];
7271 bool verbose = false;
73- dev_t ttydev ;
72+ dev_t ttydev = -1 ;
73+ int ch , errors = 0 , ntests = 1 ;
7474
7575 initprogname (argc > 0 ? argv [0 ] : "check_ttyname" );
7676
@@ -87,9 +87,35 @@ main(int argc, char *argv[])
8787
8888 /* Lookup tty name using kernel info if possible. */
8989 ttydev = get_process_ttyname (pathbuf , sizeof (pathbuf ));
90- if (ttydev != (dev_t )- 1 )
90+ if (ttydev != (dev_t )- 1 ) {
91+ char numbuf [STRLEN_MAX_UNSIGNED (unsigned long long) + 1 ];
92+ unsigned long long ullval ;
93+ const char * errstr ;
94+ dev_t newdev ;
95+
96+ /* For comparison below. */
9197 tty_sudo = pathbuf ;
9298
99+ /* Check that we can format a dev_t as a string and parse it. */
100+ ntests ++ ;
101+ #if SIZEOF_DEV_T == SIZEOF_LONG
102+ ullval = (unsigned long )ttydev ;
103+ #else
104+ ullval = (unsigned long long )ttydev ;
105+ #endif
106+ (void )snprintf (numbuf , sizeof (numbuf ), "%llu" , ullval );
107+ newdev = sudo_strtonum (numbuf , LLONG_MIN , LLONG_MAX , & errstr );
108+ if (errstr != NULL ) {
109+ printf ("%s: FAIL unable to parse device number %s: %s" ,
110+ getprogname (), numbuf , errstr );
111+ errors ++ ;
112+ } else if (ttydev != newdev ) {
113+ printf ("%s: FAIL device mismatch for %s, %s != %llu" ,
114+ getprogname (), pathbuf , numbuf , ullval );
115+ errors ++ ;
116+ }
117+ }
118+
93119#if defined(HAVE_KINFO_PROC2_NETBSD ) || \
94120 defined(HAVE_KINFO_PROC_OPENBSD ) || \
95121 defined(HAVE_KINFO_PROC_FREEBSD ) || \
0 commit comments