summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris Vink <joris@cvs.openbsd.org>2006-03-30 23:19:21 +0000
committerJoris Vink <joris@cvs.openbsd.org>2006-03-30 23:19:21 +0000
commit875e8c358446b221ec26ef74163d817beac5e997 (patch)
treedaa9dbc8deb6454425ce70d27a2e9a2d1776177d
parentc088de16bb60fa31238c0b019977e7fbf41fdd16 (diff)
add temporary files to the worklist before creating them, this prevents
a race when the user would interrupt the program when it was returning from cvs_buf_write_stmp() and leave the temporary files behind.
-rw-r--r--usr.bin/rcs/ci.c8
-rw-r--r--usr.bin/rcs/rcsdiff.c14
2 files changed, 14 insertions, 8 deletions
diff --git a/usr.bin/rcs/ci.c b/usr.bin/rcs/ci.c
index 30e39a9e42c..dcfa42814eb 100644
--- a/usr.bin/rcs/ci.c
+++ b/usr.bin/rcs/ci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ci.c,v 1.131 2006/03/28 12:48:51 xsa Exp $ */
+/* $OpenBSD: ci.c,v 1.132 2006/03/30 23:19:20 joris Exp $ */
/*
* Copyright (c) 2005, 2006 Niall O'Higgins <niallo@openbsd.org>
* All rights reserved.
@@ -327,17 +327,19 @@ checkin_diff_file(struct checkin_params *pb)
strlcpy(path1, rcs_tmpdir, sizeof(path1));
strlcat(path1, "/diff1.XXXXXXXXXX", sizeof(path1));
- cvs_buf_write_stmp(b1, path1, 0600);
cvs_worklist_add(path1, &rcs_temp_files);
+ cvs_buf_write_stmp(b1, path1, 0600);
+
cvs_buf_free(b1);
b1 = NULL;
strlcpy(path2, rcs_tmpdir, sizeof(path2));
strlcat(path2, "/diff2.XXXXXXXXXX", sizeof(path2));
- cvs_buf_write_stmp(b2, path2, 0600);
cvs_worklist_add(path2, &rcs_temp_files);
+ cvs_buf_write_stmp(b2, path2, 0600);
+
cvs_buf_free(b2);
b2 = NULL;
diff --git a/usr.bin/rcs/rcsdiff.c b/usr.bin/rcs/rcsdiff.c
index 24bad19731b..c791d6b1059 100644
--- a/usr.bin/rcs/rcsdiff.c
+++ b/usr.bin/rcs/rcsdiff.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rcsdiff.c,v 1.41 2006/03/24 05:14:48 ray Exp $ */
+/* $OpenBSD: rcsdiff.c,v 1.42 2006/03/30 23:19:20 joris Exp $ */
/*
* Copyright (c) 2005 Joris Vink <joris@openbsd.org>
* All rights reserved.
@@ -209,9 +209,10 @@ rcsdiff_file(RCSFILE *file, RCSNUM *rev, const char *filename)
strlcpy(path1, rcs_tmpdir, sizeof(path1));
strlcat(path1, "/diff1.XXXXXXXXXX", sizeof(path1));
- cvs_buf_write_stmp(b1, path1, 0600);
cvs_worklist_add(path1, &rcs_temp_files);
+ cvs_buf_write_stmp(b1, path1, 0600);
+
cvs_buf_free(b1);
b1 = NULL;
@@ -220,9 +221,10 @@ rcsdiff_file(RCSFILE *file, RCSNUM *rev, const char *filename)
strlcpy(path2, rcs_tmpdir, sizeof(path2));
strlcat(path2, "/diff2.XXXXXXXXXX", sizeof(path2));
- cvs_buf_write_stmp(b2, path2, 0600);
cvs_worklist_add(path2, &rcs_temp_files);
+ cvs_buf_write_stmp(b2, path2, 0600);
+
cvs_buf_free(b2);
b2 = NULL;
@@ -288,9 +290,10 @@ rcsdiff_rev(RCSFILE *file, RCSNUM *rev1, RCSNUM *rev2)
strlcpy(path1, rcs_tmpdir, sizeof(path1));
strlcat(path1, "/diff1.XXXXXXXXXX", sizeof(path1));
- cvs_buf_write_stmp(b1, path1, 0600);
cvs_worklist_add(path1, &rcs_temp_files);
+ cvs_buf_write_stmp(b1, path1, 0600);
+
cvs_buf_free(b1);
b1 = NULL;
@@ -299,9 +302,10 @@ rcsdiff_rev(RCSFILE *file, RCSNUM *rev1, RCSNUM *rev2)
strlcpy(path2, rcs_tmpdir, sizeof(path2));
strlcat(path2, "/diff2.XXXXXXXXXX", sizeof(path2));
- cvs_buf_write_stmp(b2, path2, 0600);
cvs_worklist_add(path2, &rcs_temp_files);
+ cvs_buf_write_stmp(b2, path2, 0600);
+
cvs_buf_free(b2);
b2 = NULL;