From: Karel Zak Date: Mon, 13 May 2013 13:40:57 +0000 (+0200) Subject: lib/tty: don't hardcode terminal fd in get_terminal_name() X-Git-Tag: v2.24-rc1~556 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=507341f83296f0e7786d8bfbb5d77a4de1666f3f;p=thirdparty%2Futil-linux.git lib/tty: don't hardcode terminal fd in get_terminal_name() Signed-off-by: Karel Zak --- diff --git a/include/ttyutils.h b/include/ttyutils.h index 021156d3e7..8882af2cb4 100644 --- a/include/ttyutils.h +++ b/include/ttyutils.h @@ -48,7 +48,8 @@ struct chardata { } while (0) extern int get_terminal_width(void); -extern int get_terminal_name(const char **path, const char **name, const char **number); +extern int get_terminal_name(int fd, const char **path, const char **name, + const char **number); #define UL_TTY_KEEPCFLAGS (1 << 1) #define UL_TTY_UTF8 (1 << 2) diff --git a/lib/ttyutils.c b/lib/ttyutils.c index 3b5a68cd85..76113a6d6c 100644 --- a/lib/ttyutils.c +++ b/lib/ttyutils.c @@ -42,7 +42,8 @@ int get_terminal_width(void) return 0; } -int get_terminal_name(const char **path, +int get_terminal_name(int fd, + const char **path, const char **name, const char **number) { @@ -56,7 +57,7 @@ int get_terminal_name(const char **path, if (number) *number = NULL; - tty = ttyname(STDERR_FILENO); + tty = ttyname(fd); if (!tty) return -1; if (path) diff --git a/login-utils/login.c b/login-utils/login.c index 0d2c165092..442ad4048a 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -356,7 +356,7 @@ static void init_tty(struct login_context *cxt) cxt->tty_mode = (mode_t) getlogindefs_num("TTYPERM", TTY_MODE); - get_terminal_name(&cxt->tty_path, &cxt->tty_name, &cxt->tty_number); + get_terminal_name(0, &cxt->tty_path, &cxt->tty_name, &cxt->tty_number); /* * In case login is suid it was possible to use a hardlink as stdin diff --git a/login-utils/su-common.c b/login-utils/su-common.c index d1a733909b..ba2a6166d2 100644 --- a/login-utils/su-common.c +++ b/login-utils/su-common.c @@ -158,7 +158,7 @@ log_syslog(struct passwd const *pw, bool successful) old_user = pwd ? pwd->pw_name : ""; } - if (get_terminal_name(NULL, &tty, NULL) == 0 && tty) + if (get_terminal_name(STDERR_FILENO, NULL, &tty, NULL) == 0 && tty) tty = "none"; openlog (program_invocation_short_name, 0 , LOG_AUTH); @@ -185,7 +185,7 @@ static void log_btmp(struct passwd const *pw) pw && pw->pw_name ? pw->pw_name : "(unknown)", sizeof(ut.ut_user)); - get_terminal_name(NULL, &tty_name, &tty_num); + get_terminal_name(STDERR_FILENO, NULL, &tty_name, &tty_num); if (tty_num) xstrncpy(ut.ut_id, tty_num, sizeof(ut.ut_id)); if (tty_name)