diff options
author | Mark Johnston <markj@FreeBSD.org> | 2020-09-01 15:14:13 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2020-09-01 15:14:13 +0000 |
commit | 12fdadf20847f526473a7a129036dd4cbe4f8dd9 (patch) | |
tree | 233f7e99c694a30924ca4a2435e2a9c7c87c6918 | |
parent | ba081586ea29116ae7f8c195a8bb01527ef729b7 (diff) | |
download | pw-darwin-12fdadf20847f526473a7a129036dd4cbe4f8dd9.tar.gz pw-darwin-12fdadf20847f526473a7a129036dd4cbe4f8dd9.tar.zst pw-darwin-12fdadf20847f526473a7a129036dd4cbe4f8dd9.zip |
pw: Fix terminal handling when setting a group password.
Reported by: Coverity
MFC after: 1 week
Sponsored by: NetApp, Inc.
Sponsored by: Klara, Inc.
-rw-r--r-- | pw/pw_group.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/pw/pw_group.c b/pw/pw_group.c index dd65062..a294d4e 100644 --- a/pw/pw_group.c +++ b/pw/pw_group.c @@ -66,13 +66,18 @@ grp_set_passwd(struct group *grp, bool update, int fd, bool precrypted) } if ((istty = isatty(fd))) { - n = t; - /* Disable echo */ - n.c_lflag &= ~(ECHO); - tcsetattr(fd, TCSANOW, &n); - printf("%sassword for group %s:", update ? "New p" : "P", - grp->gr_name); - fflush(stdout); + if (tcgetattr(fd, &t) == -1) + istty = 0; + else { + n = t; + /* Disable echo */ + n.c_lflag &= ~(ECHO); + tcsetattr(fd, TCSANOW, &n); + printf("%sassword for group %s:", + update ? "New p" : "P", + grp->gr_name); + fflush(stdout); + } } b = read(fd, line, sizeof(line) - 1); if (istty) { /* Restore state */ |