diff options
author | imp <imp@FreeBSD.org> | 1997-03-24 05:44:28 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1997-03-24 05:44:28 +0000 |
commit | 17787893f3501b922304307dc3e8bccde18b9742 (patch) | |
tree | 054ce917cf700f6af2dad8868cfe458d2ca2bdc7 /sbin/disklabel/disklabel.c | |
parent | 4626bcf70ba6e71d057c1f6ef1545b11c95ad327 (diff) | |
download | FreeBSD-src-17787893f3501b922304307dc3e8bccde18b9742.zip FreeBSD-src-17787893f3501b922304307dc3e8bccde18b9742.tar.gz |
Use mkstemp rather than mktemp to prevent a small race.
Obtained from: OpenBSD
Diffstat (limited to 'sbin/disklabel/disklabel.c')
-rw-r--r-- | sbin/disklabel/disklabel.c | 22 |
1 files changed, 11 insertions, 11 deletions
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') |