]> sourceware.org Git - lvm2.git/commitdiff
Never use clvmd singlenode unless explicitly requested with -Isinglenode.
authorAlasdair Kergon <agk@redhat.com>
Wed, 28 Jul 2010 14:01:40 +0000 (14:01 +0000)
committerAlasdair Kergon <agk@redhat.com>
Wed, 28 Jul 2010 14:01:40 +0000 (14:01 +0000)
WHATS_NEW
daemons/clvmd/clvmd-singlenode.c
daemons/clvmd/clvmd.c

index f6487ff71b37162d58ba5ebdce671ffee7f2bc11..c279010cc1abfe82eac25084f5e6b0e7fa91f713 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -3,6 +3,7 @@ Version 2.02.72 - 28th July 2010  [CVE-2010-2526]
   Change clvmd to communicate with lvm2 via a socket in /var/run/lvm.
   Return controlled error if clvmd is run by non-root user.
   Add configure --default-run-dir for /var/run/lvm.
+  Never use clvmd singlenode unless explicitly requested with -Isinglenode.
 
 Version 2.02.71 - 28th July 2010
 ================================
index ec98f2cbf68132d9b6ea9ee310721e3cea137537..4393a2e4b2107aaeaad1675fb67df9f21e0c6582 100644 (file)
 #include <sys/socket.h>
 #include <fcntl.h>
 
-static const char SINGLENODE_CLVMD_SOCKNAME[] = "\0singlenode_clvmd";
+static const char SINGLENODE_CLVMD_SOCKNAME[] = DEFAULT_RUN_DIR "/clvmd_singlenode.sock";
 static int listen_fd = -1;
 
+static void close_comms()
+{
+       if (listen_fd != -1 && close(listen_fd))
+               stack;
+       (void)unlink(SINGLENODE_CLVMD_SOCKNAME);
+       listen_fd = -1;
+}
+
 static int init_comms()
 {
        struct sockaddr_un addr;
+       mode_t old_mask;
+
+       close_comms();
+       old_mask = umask(0077);
 
        listen_fd = socket(PF_UNIX, SOCK_STREAM, 0);
        if (listen_fd < 0) {
                DEBUGLOG("Can't create local socket: %s\n", strerror(errno));
-               return -1;
+               goto error;
        }
        /* Set Close-on-exec */
        fcntl(listen_fd, F_SETFD, 1);
@@ -48,16 +60,19 @@ static int init_comms()
 
        if (bind(listen_fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
                DEBUGLOG("Can't bind local socket: %s\n", strerror(errno));
-               close(listen_fd);
-               return -1;
+               goto error;
        }
        if (listen(listen_fd, 10) < 0) {
                DEBUGLOG("Can't listen local socket: %s\n", strerror(errno));
-               close(listen_fd);
-               return -1;
+               goto error;
        }
 
+       umask(old_mask);
        return 0;
+error:
+       umask(old_mask);
+       close_comms();
+       return -1;
 }
 
 static int _init_cluster(void)
@@ -74,7 +89,7 @@ static int _init_cluster(void)
 
 static void _cluster_closedown(void)
 {
-       close(listen_fd);
+       close_comms();
 
        DEBUGLOG("cluster_closedown\n");
        destroy_lvhash();
index 2365a3310925fc2638e7bf778835ad0d5ffbd47b..9554eea251afe26c46cf36a02cdaa018dd2d3f69 100644 (file)
@@ -479,7 +479,7 @@ int main(int argc, char *argv[])
 #endif
 #ifdef USE_SINGLENODE
        if (!clops)
-               if ((cluster_iface == IF_AUTO || cluster_iface == IF_SINGLENODE) && (clops = init_singlenode_cluster())) {
+               if (cluster_iface == IF_SINGLENODE && (clops = init_singlenode_cluster())) {
                        max_csid_len = SINGLENODE_CSID_LEN;
                        max_cluster_message = SINGLENODE_MAX_CLUSTER_MESSAGE;
                        max_cluster_member_name_len = MAX_CLUSTER_MEMBER_NAME_LEN;
This page took 0.04857 seconds and 5 git commands to generate.