summaryrefslogtreecommitdiffstats
path: root/pw
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2016-10-21 20:17:19 +0000
committerAlan Somers <asomers@FreeBSD.org>2016-10-21 20:17:19 +0000
commiteaf8d4a9d903595d2f3a388ed56fd20b34d9f80b (patch)
tree568796d378b9962fc7a08cba2b8167f797aa4f35 /pw
parent677071471e7d81c72fc4e4a71e04441d010611ab (diff)
downloadpw-darwin-eaf8d4a9d903595d2f3a388ed56fd20b34d9f80b.tar.gz
pw-darwin-eaf8d4a9d903595d2f3a388ed56fd20b34d9f80b.tar.zst
pw-darwin-eaf8d4a9d903595d2f3a388ed56fd20b34d9f80b.zip
Close some file descriptor leaks in pw
MFC after: 4 weeks Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D8245
Diffstat (limited to 'pw')
-rw-r--r--pw/grupd.c3
-rw-r--r--pw/pw_nis.c3
-rw-r--r--pw/pwupd.c2
3 files changed, 8 insertions, 0 deletions
diff --git a/pw/grupd.c b/pw/grupd.c
index 9cbe0cb..38d5e5b 100644
--- a/pw/grupd.c
+++ b/pw/grupd.c
@@ -34,6 +34,7 @@ static const char rcsid[] =
#include <libutil.h>
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include "pwupd.h"
@@ -73,8 +74,10 @@ gr_update(struct group * grp, char const * group)
}
if (gr_copy(pfd, tfd, gr, old_gr) == -1) {
gr_fini();
+ close(tfd);
err(1, "gr_copy()");
}
+ close(tfd);
if (gr_mkdb() == -1) {
gr_fini();
err(1, "gr_mkdb()");
diff --git a/pw/pw_nis.c b/pw/pw_nis.c
index 6cc361b..35b26ea 100644
--- a/pw/pw_nis.c
+++ b/pw/pw_nis.c
@@ -34,6 +34,7 @@ static const char rcsid[] =
#include <err.h>
#include <pwd.h>
#include <libutil.h>
+#include <unistd.h>
#include "pw.h"
@@ -63,8 +64,10 @@ pw_nisupdate(const char * path, struct passwd * pwd, char const * user)
}
if (pw_copy(pfd, tfd, pw, old_pw) == -1) {
pw_fini();
+ close(tfd);
err(1, "pw_copy()");
}
+ close(tfd);
if (chmod(pw_tempname(), 0644) == -1)
err(1, "chmod()");
if (rename(pw_tempname(), path) == -1)
diff --git a/pw/pwupd.c b/pw/pwupd.c
index ee23952..3bcb95f 100644
--- a/pw/pwupd.c
+++ b/pw/pwupd.c
@@ -111,8 +111,10 @@ pw_update(struct passwd * pwd, char const * user)
}
if (pw_copy(pfd, tfd, pw, old_pw) == -1) {
pw_fini();
+ close(tfd);
err(1, "pw_copy()");
}
+ close(tfd);
/*
* in case of deletion of a user, the whole database
* needs to be regenerated