diff --git a/src/vipw.c b/src/vipw.c index da922abe..5ffd1680 100644 --- a/src/vipw.c +++ b/src/vipw.c @@ -132,16 +132,18 @@ static int create_backup_file (FILE * fp, char *backup, struct stat *sb) unlink (backup); return -1; } - if (fclose (bkfp) != 0) { - unlink (backup); - return -1; - } ub.actime = sb->st_atime; ub.modtime = sb->st_mtime; if ( (utime (backup, &ub) != 0) - || (chmod (backup, sb->st_mode) != 0) - || (chown (backup, sb->st_uid, sb->st_gid) != 0)) { + || (fchmod(fileno(bkfp), sb->st_mode) != 0) + || (fchown(fileno(bkfp), sb->st_uid, sb->st_gid) != 0)) { + fclose(bkfp); + unlink (backup); + return -1; + } + + if (fclose (bkfp) != 0) { unlink (backup); return -1; }