From d8ec3078d4a2cdfee5fe22c22034830c0aeca15f Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Sat, 4 Aug 2001 08:15:02 +0000 Subject: [PATCH] relax safe_create(). --- bin/rndc/unix/os.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bin/rndc/unix/os.c b/bin/rndc/unix/os.c index 8dfdf8d592..1e4cf8a9c7 100644 --- a/bin/rndc/unix/os.c +++ b/bin/rndc/unix/os.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: os.c,v 1.1 2001/08/03 05:56:22 marka Exp $ */ +/* $Id: os.c,v 1.2 2001/08/04 08:15:02 marka Exp $ */ #include @@ -46,18 +46,22 @@ safe_create(const char *filename) { int fd; FILE *f; struct stat sb; + int flags = O_WRONLY; if (stat(filename, &sb) == -1) { if (errno != ENOENT) return (NULL); + flags = O_WRONLY|O_CREAT|O_EXCL; } else if ((sb.st_mode & S_IFREG) == 0) { errno = EOPNOTSUPP; return (NULL); - } + } else + flags = O_WRONLY|O_TRUNC; - fd = open(filename, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); + fd = open(filename, flags, S_IRUSR|S_IWUSR); if (fd == -1) return (NULL); + (void)fchmod(fd, S_IRUSR|S_IWUSR); f = fdopen(fd, "w"); if (f == NULL) close(fd);