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@comedia.it> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
cf55630357
commit
ed8fa52f31
25
mdmon.c
25
mdmon.c
|
@ -120,6 +120,9 @@ static int make_pidfile(char *devname)
|
||||||
int fd;
|
int fd;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
if (mkdir(pid_dir, 0600) < 0 &&
|
||||||
|
errno != EEXIST)
|
||||||
|
return -errno;
|
||||||
sprintf(path, "%s/%s.pid", pid_dir, devname);
|
sprintf(path, "%s/%s.pid", pid_dir, devname);
|
||||||
|
|
||||||
fd = open(path, O_RDWR|O_CREAT|O_EXCL, 0600);
|
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)
|
if (victim > 0)
|
||||||
remove_pidfile(devname);
|
remove_pidfile(devname);
|
||||||
if (mkdir(VAR_RUN, 0600) >= 0 || errno == EEXIST)
|
pid_dir = VAR_RUN;
|
||||||
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);
|
|
||||||
}
|
|
||||||
if (make_pidfile(devname) < 0) {
|
if (make_pidfile(devname) < 0) {
|
||||||
fprintf(stderr, "mdmon: Cannot create pid file in %s - aborting.\n",
|
/* Try the alternate */
|
||||||
pid_dir);
|
pid_dir = ALT_RUN;
|
||||||
exit(3);
|
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);
|
container->sock = make_control_sock(devname);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue