summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKris Kennaway <kris@FreeBSD.org>2001-05-08 11:11:42 +0000
committerKris Kennaway <kris@FreeBSD.org>2001-05-08 11:11:42 +0000
commita47f98edb496dba1e4bf0750ef36964595a04ce5 (patch)
tree14f4553b81e0eb8f11553fc6ca38f6508eb2e6bb
parent724682d2331ecf9a5fcd7cfcbabcc13efe8bc0f3 (diff)
Notes
-rw-r--r--usr.bin/wall/wall.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/usr.bin/wall/wall.c b/usr.bin/wall/wall.c
index 25cb7865af58..96647df4e553 100644
--- a/usr.bin/wall/wall.c
+++ b/usr.bin/wall/wall.c
@@ -189,6 +189,7 @@ makemsg(char *fname)
int fd;
char *p, *tty, hostname[MAXHOSTNAMELEN], lbuf[256], tmpname[64];
const char *whom;
+ gid_t egid;
(void)snprintf(tmpname, sizeof(tmpname), "%s/wall.XXXXXX", _PATH_TMP);
if ((fd = mkstemp(tmpname)) == -1 || !(fp = fdopen(fd, "r+")))
@@ -225,8 +226,13 @@ makemsg(char *fname)
}
(void)fprintf(fp, "%79s\r\n", " ");
- if (fname && !(freopen(fname, "r", stdin)))
- err(1, "can't read %s", fname);
+ if (fname) {
+ egid = getegid();
+ setegid(getgid());
+ if (freopen(fname, "r", stdin) == NULL)
+ err(1, "can't read %s", fname);
+ setegid(egid);
+ }
while (fgets(lbuf, sizeof(lbuf), stdin))
for (cnt = 0, p = lbuf; (ch = *p) != '\0'; ++p, ++cnt) {
if (ch == '\r') {