Luca Berra: mdmon: check select a writable pid_dir

Martin F. Krafft madduck at alioth.debian.org
Mon May 24 09:21:08 UTC 2010


Module: mdadm
Branch: upstream
Commit: ed8fa52f31521b8314859f290c464f77359933a0
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=ed8fa52f31521b8314859f290c464f77359933a0

Author: Luca Berra <bluca at comedia.it>
Date:   Sun Feb 28 15:42:57 2010 +0100

mdmon: check select a writable pid_dir

Check that either VAR_DIR or ALT_DIR is actually writable before
selecting it.

Signed-off-by: Luca Berra <bluca at comedia.it>
Signed-off-by: NeilBrown <neilb at suse.de>

---

 mdmon.c |   25 ++++++++++++-------------
 1 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/mdmon.c b/mdmon.c
index a3da795..ef1872a 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -120,6 +120,9 @@ static int make_pidfile(char *devname)
 	int fd;
 	int n;
 
+	if (mkdir(pid_dir, 0600) < 0 &&
+	    errno != EEXIST)
+		return -errno;
 	sprintf(path, "%s/%s.pid", pid_dir, devname);
 
 	fd = open(path, O_RDWR|O_CREAT|O_EXCL, 0600);
@@ -474,20 +477,16 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
 	 */
 	if (victim > 0)
 		remove_pidfile(devname);
-	if (mkdir(VAR_RUN, 0600) >= 0 || errno == EEXIST)
-		pid_dir = VAR_RUN;
-	else if (mkdir(ALT_RUN, 0600) >= 0 || errno == EEXIST)
-		pid_dir = ALT_RUN;
-	else {
-		fprintf(stderr, "mdmon: Neither %s nor %s are writable\n"
-			"       cannot create .pid or .sock files.  Aborting\n",
-			VAR_RUN, ALT_RUN);
-		exit(3);
-	}
+	pid_dir = VAR_RUN;
 	if (make_pidfile(devname) < 0) {
-		fprintf(stderr, "mdmon: Cannot create pid file in %s - aborting.\n",
-			pid_dir);
-		exit(3);
+		/* Try the alternate */
+		pid_dir = ALT_RUN;
+		if (make_pidfile(devname) < 0) {
+			fprintf(stderr, "mdmon: Neither %s nor %s are writable\n"
+				"       cannot create .pid or .sock files.  Aborting\n",
+				VAR_RUN, ALT_RUN);
+			exit(3);
+		}
 	}
 	container->sock = make_control_sock(devname);
 




More information about the pkg-mdadm-commits mailing list