aboutsummaryrefslogtreecommitdiff
path: root/sbin/bsdlabel/bsdlabel.c
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>1997-03-24 05:44:28 +0000
committerWarner Losh <imp@FreeBSD.org>1997-03-24 05:44:28 +0000
commit722ceb3f84164b19b813b0b71529c85742b02d19 (patch)
tree6a7c7c0d69e37e62f6b0716d76163d22dcd1f892 /sbin/bsdlabel/bsdlabel.c
parent7d951713e8eeb3537249c3cd7135844c59c8756a (diff)
downloadsrc-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.c22
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')