From 17787893f3501b922304307dc3e8bccde18b9742 Mon Sep 17 00:00:00 2001 From: imp Date: Mon, 24 Mar 1997 05:44:28 +0000 Subject: Use mkstemp rather than mktemp to prevent a small race. Obtained from: OpenBSD --- sbin/disklabel/disklabel.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'sbin/disklabel') diff --git a/sbin/disklabel/disklabel.c b/sbin/disklabel/disklabel.c index 5fcd1cd..032f601 100644 --- a/sbin/disklabel/disklabel.c +++ b/sbin/disklabel/disklabel.c @@ -800,36 +800,36 @@ edit(lp, f) struct disklabel *lp; int f; { - register int c; + register int c, fd; struct disklabel label; - FILE *fd; + FILE *fp; - (void) mktemp(tmpfil); - fd = fopen(tmpfil, "w"); - if (fd == NULL) { + if ((fd = mkstemp(tmpfil)) == -1 || + (fp = fdopen(fd, "w")) == NULL) { fprintf(stderr, "%s: Can't create\n", tmpfil); return (1); } - (void)fchmod(fileno(fd), 0600); - display(fd, lp); - fclose(fd); + display(fp, lp); + fclose(fp); for (;;) { if (!editit()) break; - fd = fopen(tmpfil, "r"); - if (fd == NULL) { + fp = fopen(tmpfil, "r"); + if (fp == NULL) { fprintf(stderr, "%s: Can't reopen for reading\n", tmpfil); break; } bzero((char *)&label, sizeof(label)); - if (getasciilabel(fd, &label)) { + if (getasciilabel(fp, &label)) { *lp = label; if (writelabel(f, bootarea, lp) == 0) { + fclose(fp); (void) unlink(tmpfil); return (0); } } + fclose(fp); printf("re-edit the label? [y]: "); fflush(stdout); c = getchar(); if (c != EOF && c != (int)'\n') -- cgit v1.1