cluster: RHEL6 - libgfs2: Fix up remove_mtab_entry

Andrew Price andyp at fedoraproject.org
Tue Feb 4 12:39:59 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=78dd4d69d8b56f5eadfbfaf6883836cc017cb418
Commit:        78dd4d69d8b56f5eadfbfaf6883836cc017cb418
Parent:        2d06dd478c27bf864ba1a5ac0cbb1ba6c3ed947f
Author:        Andrew Price <anprice at redhat.com>
AuthorDate:    Tue Feb 4 00:00:05 2014 -0600
Committer:     Andrew Price <anprice at redhat.com>
CommitterDate: Tue Feb 4 12:21:11 2014 +0000

libgfs2: Fix up remove_mtab_entry

mkstemp was creating the temporary mtab file with overly tight
permissions causing /etc/mtab to end up with an 0600 mode instead of the
regular 0644. This patch resets the mode to 0644 by calling fchmod on
the file descriptor returned by mkstemp.

It also removes a superfluous close() call and sets the temp filename
char array on initialisation instead of using strcpy().

Resolves: rhbz#1059853

Signed-off-by: Andrew Price <anprice at redhat.com>
---
 gfs2/libgfs2/misc.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/gfs2/libgfs2/misc.c b/gfs2/libgfs2/misc.c
index 3989bf1..8e0ca6f 100644
--- a/gfs2/libgfs2/misc.c
+++ b/gfs2/libgfs2/misc.c
@@ -217,7 +217,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
 {
 	FILE *mtab, *mtabnew;
 	struct mntent *mountent;
-	char mtab_tmpfn[PATH_MAX];
+	char mtab_tmpfn[] = "/etc/mtab.XXXXXX";
 	int error, fd;
 	mode_t mask;
 
@@ -225,7 +225,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
 	if (mtab == NULL)
 		die("Couldn't open /etc/mtab for writing: %s\n",
 		    strerror(errno));
-	strcpy(mtab_tmpfn, "/etc/mtab.XXXXXX");
+
 	mask = umask(S_IXUSR | S_IRWXG | S_IRWXO);
 	fd = mkstemp(mtab_tmpfn);
 	umask(mask);
@@ -233,6 +233,9 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
 		die("Couldn't open temporary mtab file for writing: %s\n",
 		    strerror(errno));
 
+	if (fchmod(fd, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH))
+		die("Couldn't change mode of temporary mtab: %s\n", strerror(errno));
+
 	mtabnew = fdopen(fd, "wt");
 	if (mtabnew == NULL)
 		die("Couldn't open %s for writing : %s\n", mtab_tmpfn,
@@ -247,8 +250,7 @@ static void remove_mtab_entry(struct gfs2_sbd *sdp)
 	}
 
 	endmntent(mtab);
-	fclose(mtabnew);
-	close(fd);
+	fclose(mtabnew); /* Closes underlying fd */
 	if (rename(mtab_tmpfn, "/etc/mtab"))
 		fprintf(stderr, "Unable to remove mount entry from mtab.\n");
 }


More information about the cluster-commits mailing list