diff options
-rw-r--r-- | usr.sbin/pw/edgroup.c | 7 | ||||
-rw-r--r-- | usr.sbin/pw/fileupd.c | 6 |
2 files changed, 5 insertions, 8 deletions
diff --git a/usr.sbin/pw/edgroup.c b/usr.sbin/pw/edgroup.c index 40313d2..1cc46b4 100644 --- a/usr.sbin/pw/edgroup.c +++ b/usr.sbin/pw/edgroup.c @@ -68,7 +68,7 @@ editgroups(char *name, char **groups) strcpy(grouptmp, groupfile); strcat(grouptmp, ".new"); - if ((infd = open(groupfile, O_RDWR | O_CREAT, 0644)) != -1) { + if ((infd = open(groupfile, O_RDWR | O_CREAT | O_EXLOCK, 0644)) != -1) { FILE *infp; if ((infp = fdopen(infd, "r+")) == NULL) @@ -76,7 +76,7 @@ editgroups(char *name, char **groups) else { int outfd; - if ((outfd = open(grouptmp, O_RDWR | O_CREAT | O_TRUNC | O_EXLOCK, 0644)) != -1) { + if ((outfd = open(grouptmp, O_RDWR | O_CREAT | O_TRUNC, 0644)) != -1) { FILE *outfp; if ((outfp = fdopen(outfd, "w+")) == NULL) @@ -207,8 +207,7 @@ editgroups(char *name, char **groups) /* * This is a gross hack, but we may have corrupted the - * original file. Unfortunately, it will lose preservation - * of the inode. + * original file. */ if (fflush(infp) == EOF || ferror(infp)) rc = rename(grouptmp, groupfile) == 0; diff --git a/usr.sbin/pw/fileupd.c b/usr.sbin/pw/fileupd.c index a846513..b88f4fa 100644 --- a/usr.sbin/pw/fileupd.c +++ b/usr.sbin/pw/fileupd.c @@ -76,7 +76,7 @@ fileupdate(char const * filename, mode_t fmode, char const * newline, char const if (pfxlen <= 1) rc = EINVAL; else { - int infd = open(filename, O_RDWR | O_CREAT, fmode); + int infd = open(filename, O_RDWR | O_CREAT | O_EXLOCK, fmode); if (infd == -1) rc = errno; @@ -92,7 +92,7 @@ fileupdate(char const * filename, mode_t fmode, char const * newline, char const strcpy(file, filename); strcat(file, ".new"); - outfd = open(file, O_RDWR | O_CREAT | O_TRUNC | O_EXLOCK, fmode); + outfd = open(file, O_RDWR | O_CREAT | O_TRUNC, fmode); if (outfd == -1) rc = errno; else { @@ -183,8 +183,6 @@ fileupdate(char const * filename, mode_t fmode, char const * newline, char const * to 'file'. * This is a gross hack, but we may have * corrupted the original file - * Unfortunately, it will lose the inode - * and hence the lock. */ if (fflush(infp) == EOF || ferror(infp)) rename(file, filename); |