diff options
author | eivind <eivind@FreeBSD.org> | 1997-09-01 00:34:51 +0000 |
---|---|---|
committer | eivind <eivind@FreeBSD.org> | 1997-09-01 00:34:51 +0000 |
commit | d8e95d8c1a6a0918fc9dda2ca247833ad222696d (patch) | |
tree | 42fed91af49ba9290d473dbe68d13f3f33e7545c /games/battlestar/save.c | |
parent | ff4b4c1d18cef70a372542d0a1a7a48e6543cf9e (diff) | |
download | FreeBSD-src-d8e95d8c1a6a0918fc9dda2ca247833ad222696d.zip FreeBSD-src-d8e95d8c1a6a0918fc9dda2ca247833ad222696d.tar.gz |
Change games from setuid games to setgid games.
Reviewed by: maybe@yes.no
Obtained from: OpenBSD (mostly deraadt@openbsd.org)
Diffstat (limited to 'games/battlestar/save.c')
-rw-r--r-- | games/battlestar/save.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/games/battlestar/save.c b/games/battlestar/save.c index ec4b4f5..8b72506 100644 --- a/games/battlestar/save.c +++ b/games/battlestar/save.c @@ -55,10 +55,13 @@ restore() sprintf(home1, "%.*s/Bstar", MAXPATHLEN - 7, home); else return; + setegid(egid); if ((fp = fopen(home1, "r")) == 0) { perror(home1); + setegid(getgid()); return; } + setegid(getgid()); fread(&WEIGHT, sizeof WEIGHT, 1, fp); fread(&CUMBER, sizeof CUMBER, 1, fp); fread(&gclock, sizeof gclock, 1, fp); @@ -112,30 +115,36 @@ save() return; sprintf(home1, "%.*s/Bstar", MAXPATHLEN - 7, home); + setegid(egid); /* Try to open the file safely. */ if (stat(home1, &sbuf) < 0) { fd = open(home1, O_WRONLY|O_CREAT|O_EXCL); if (fd < 0) { fprintf(stderr, "Can't create %s\n", home1); + setegid(getgid()); return; } } else { - if (sbuf.st_nlink > 1) { + if (sbuf.st_mode & S_IFLNK) { fprintf(stderr, "No symlinks!\n"); + setegid(getgid()); return; } fd = open(home1, O_WRONLY|O_EXCL); if (fd < 0) { fprintf(stderr, "Can't open %s for writing\n", home1); + setegid(getgid()); return; } } if ((fp = fdopen(fd, "w")) == 0) { perror(home1); + setegid(getgid()); return; } + setegid(getgid()); printf("Saved in %s.\n", home1); fwrite(&WEIGHT, sizeof WEIGHT, 1, fp); |