From 50e417c8ad08e6a5d3c15adc39c16b6085b3cab6 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 7 May 2016 23:44:17 +0100 Subject: write: tell when effective gid and tty path group mismatch Most commonly this error happens when write(1) executable does not have correct group ownership and setgid bit. The earlier message was unclear what exactly was wrong. $ mesg is y $ write testuser write: you have write permission turned off Alternatively the 'getegid() == s.st_gid' could be considered unnecessary. Afterall if to write to destination tty is denied that does not go unnoticed at thet time when tty is opened. Reviewed-by: Benno Schulenberg Signed-off-by: Sami Kerola --- term-utils/write.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'term-utils/write.c') diff --git a/term-utils/write.c b/term-utils/write.c index 8855c1e93..1b476473f 100644 --- a/term-utils/write.c +++ b/term-utils/write.c @@ -113,8 +113,13 @@ static int check_tty(char *tty, int *tty_writeable, time_t *tty_atime, int showe } if (getuid() == 0) /* root can always write */ *tty_writeable = 1; - else - *tty_writeable = (s.st_mode & S_IWGRP) && (getegid() == s.st_gid); + else { + if (getegid() != s.st_gid) { + warnx(_("effective gid does not match group of %s"), path); + return 1; + } + *tty_writeable = s.st_mode & S_IWGRP; + } if (tty_atime) *tty_atime = s.st_atime; return 0; -- cgit v1.2.3-55-g7522