From cb57f04cb26553c23feb9874da15b4386f68a98f Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Mon, 29 Oct 2012 17:19:43 +0000 Subject: make pw_init and gr_init fail if the specified master password or group file is a directory. MFC after: 1 month --- libutil/gr_util.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libutil/gr_util.c') diff --git a/libutil/gr_util.c b/libutil/gr_util.c index 0173595..323d3ff 100644 --- a/libutil/gr_util.c +++ b/libutil/gr_util.c @@ -63,6 +63,8 @@ static const char group_line_format[] = "%s:%s:%ju:"; int gr_init(const char *dir, const char *group) { + struct stat st; + if (dir == NULL) { strcpy(group_dir, _PATH_ETC); } else { @@ -88,6 +90,15 @@ gr_init(const char *dir, const char *group) } strcpy(group_file, group); } + + if (stat(group_file, &st) == -1) + return (-1); + + if (S_ISDIR(st.st_mode)) { + errno = EISDIR; + return (-1); + } + initialized = 1; return (0); } -- cgit v1.2.3 From 955a095f02cda3bf4ac1e3bd760317addf54b19a Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Mon, 29 Oct 2012 18:06:09 +0000 Subject: backout r242319, racy and not done in the right place Reported by: Garrett Cooper --- libutil/gr_util.c | 9 --------- 1 file changed, 9 deletions(-) (limited to 'libutil/gr_util.c') diff --git a/libutil/gr_util.c b/libutil/gr_util.c index 323d3ff..6d96d5e 100644 --- a/libutil/gr_util.c +++ b/libutil/gr_util.c @@ -63,7 +63,6 @@ static const char group_line_format[] = "%s:%s:%ju:"; int gr_init(const char *dir, const char *group) { - struct stat st; if (dir == NULL) { strcpy(group_dir, _PATH_ETC); @@ -91,14 +90,6 @@ gr_init(const char *dir, const char *group) strcpy(group_file, group); } - if (stat(group_file, &st) == -1) - return (-1); - - if (S_ISDIR(st.st_mode)) { - errno = EISDIR; - return (-1); - } - initialized = 1; return (0); } -- cgit v1.2.3 From 1082433740913c828bc90af27621772b81cf4b17 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Tue, 20 Nov 2012 07:22:07 +0000 Subject: change mode the group file to 0644 after a successfull rename(2) --- libutil/gr_util.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libutil/gr_util.c') diff --git a/libutil/gr_util.c b/libutil/gr_util.c index 6d96d5e..8d0490b 100644 --- a/libutil/gr_util.c +++ b/libutil/gr_util.c @@ -318,7 +318,14 @@ gr_copy(int ffd, int tfd, const struct group *gr, struct group *old_gr) int gr_mkdb(void) { - return (rename(tempname, group_file)); + int ret; + + ret = rename(tempname, group_file); + + if (ret == 0) + chmod(group_file, 0644); + + return (ret); } /* -- cgit v1.2.3 From 99799f94bd83e6e3821bed79cef8571670c3f021 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Tue, 20 Nov 2012 14:03:09 +0000 Subject: only rename(2) after chmod(2) has succeed report error if chmod(2) fails Reported by: jh --- libutil/gr_util.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'libutil/gr_util.c') diff --git a/libutil/gr_util.c b/libutil/gr_util.c index 8d0490b..be34395 100644 --- a/libutil/gr_util.c +++ b/libutil/gr_util.c @@ -318,14 +318,10 @@ gr_copy(int ffd, int tfd, const struct group *gr, struct group *old_gr) int gr_mkdb(void) { - int ret; - - ret = rename(tempname, group_file); - - if (ret == 0) - chmod(group_file, 0644); + if (chmod(tempname, 0644) != 0) + return (-1); - return (ret); + return (rename(tempname, group_file)); } /* -- cgit v1.2.3