diff options
author | 1996-10-15 09:35:58 +0000 | |
---|---|---|
committer | 1996-10-15 09:35:58 +0000 | |
commit | e612da3172fc466235311c0c8e1dfec4f3a6fd37 (patch) | |
tree | 0084ebf1c8d779860402f91badbd0976bc7a7ad8 | |
parent | unused variable noticed by asriel(right?), proto from mccanne; fed to freebsd (diff) | |
download | wireguard-openbsd-e612da3172fc466235311c0c8e1dfec4f3a6fd37.tar.xz wireguard-openbsd-e612da3172fc466235311c0c8e1dfec4f3a6fd37.zip |
deal with files as euid; based on code by alex@freebsd.org
-rw-r--r-- | games/adventure/save.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/games/adventure/save.c b/games/adventure/save.c index e748ad2e25e..9ee1eac3c0d 100644 --- a/games/adventure/save.c +++ b/games/adventure/save.c @@ -46,7 +46,9 @@ static char rcsid[] = "$NetBSD: save.c,v 1.2 1995/03/21 12:05:08 cgd Exp $"; #endif #endif /* not lint */ +#include <sys/types.h> #include <stdio.h> +#include <stdlib.h> #include "hdr.h" struct savestruct @@ -129,19 +131,26 @@ char *outfile; /* to output the data using checksum to start random #s */ char *s; long sum; int i; + uid_t euid_save; crc_start(); for (p = save_array; p->address != NULL; p++) sum = crc(p->address, p->width); srandom((int) sum); + euid_save = geteuid(); + seteuid(getuid()); + if ((out = fopen(outfile, "wb")) == NULL) { fprintf(stderr, "Hmm. The name \"%s\" appears to be magically blocked.\n", outfile); + seteuid(euid_save); return 1; } + seteuid(euid_save); + fwrite(&sum, sizeof(sum), 1, out); /* Here's the random() key */ for (p = save_array; p->address != NULL; p++) { @@ -161,14 +170,21 @@ char *infile; char *s; long sum, cksum; int i; + uid_t euid_save; + + euid_save = geteuid(); + seteuid(euid_save); if ((in = fopen(infile, "rb")) == NULL) { fprintf(stderr, "Hmm. The file \"%s\" appears to be magically blocked.\n", infile); + seteuid(euid_save); return 1; } + seteuid(euid_save); + fread(&sum, sizeof(sum), 1, in); /* Get the seed */ srandom((int) sum); for (p = save_array; p->address != NULL; p++) |