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);