diff options
author | Warner Losh <imp@FreeBSD.org> | 1997-03-24 05:44:28 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 1997-03-24 05:44:28 +0000 |
commit | 722ceb3f84164b19b813b0b71529c85742b02d19 (patch) | |
tree | 6a7c7c0d69e37e62f6b0716d76163d22dcd1f892 /sbin/bsdlabel/bsdlabel.c | |
parent | 7d951713e8eeb3537249c3cd7135844c59c8756a (diff) | |
download | src-722ceb3f84164b19b813b0b71529c85742b02d19.tar.gz src-722ceb3f84164b19b813b0b71529c85742b02d19.zip |
Use mkstemp rather than mktemp to prevent a small race.
Obtained from: OpenBSD
Notes
Notes:
svn path=/head/; revision=24180
Diffstat (limited to 'sbin/bsdlabel/bsdlabel.c')
-rw-r--r-- | sbin/bsdlabel/bsdlabel.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/sbin/bsdlabel/bsdlabel.c b/sbin/bsdlabel/bsdlabel.c index 5fcd1cdb7056..032f601d1b7b 100644 --- a/sbin/bsdlabel/bsdlabel.c +++ b/sbin/bsdlabel/bsdlabel.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') |