summaryrefslogtreecommitdiffstats
path: root/term-utils/write.c
diff options
context:
space:
mode:
authorSami Kerola2016-05-08 00:44:17 +0200
committerSami Kerola2016-07-04 00:35:09 +0200
commit50e417c8ad08e6a5d3c15adc39c16b6085b3cab6 (patch)
treef2630eeb3b1c64b80faf70fa799a393c23645204 /term-utils/write.c
parentwrite: improve coding style (diff)
downloadkernel-qcow2-util-linux-50e417c8ad08e6a5d3c15adc39c16b6085b3cab6.tar.gz
kernel-qcow2-util-linux-50e417c8ad08e6a5d3c15adc39c16b6085b3cab6.tar.xz
kernel-qcow2-util-linux-50e417c8ad08e6a5d3c15adc39c16b6085b3cab6.zip
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 <bensberg@justemail.net> Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'term-utils/write.c')
-rw-r--r--term-utils/write.c9
1 files changed, 7 insertions, 2 deletions
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;