Fix socket permissions after master-failover
authorHrvoje Ribicic <riba@google.com>
Fri, 15 Nov 2013 10:44:04 +0000 (10:44 +0000)
committerHrvoje Ribicic <riba@google.com>
Mon, 18 Nov 2013 08:59:16 +0000 (08:59 +0000)
When using gnt-cluster master-failover, on the soon-to-be-master the
luxi daemon is started by the node daemon. This makes the luxi
daemon inherit the node daemon's umask 077, making the communication
socket unreadable to group members. When using Ganeti with non-root
users, this causes problems, as reported in issue 477.

To fix this, the socket permissions are set explicitly.

Signed-off-by: Hrvoje Ribicic <riba@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>

lib/constants.py
src/Ganeti/Luxi.hs

index eefc250..dd4b777 100644 (file)
@@ -240,6 +240,7 @@ LUXI_VERSION = CONFIG_VERSION
 LUXI_OVERRIDE = "FORCE_LUXI_SOCKET"
 LUXI_OVERRIDE_MASTER = "master"
 LUXI_OVERRIDE_QUERY = "query"
+LUXI_SOCKET_PERMS = 0660
 
 # one of "no", "yes", "only"
 SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
index ecad598..ebe2f0f 100644 (file)
@@ -67,6 +67,7 @@ import Text.JSON.Types
 import System.Directory (removeFile)
 import System.IO (hClose, hFlush, hWaitForInput, Handle, IOMode(..))
 import System.IO.Error (isEOFError)
+import System.Posix.Files
 import System.Timeout
 import qualified Network.Socket as S
 
@@ -228,8 +229,9 @@ getServer :: Bool -> FilePath -> IO S.Socket
 getServer setOwner path = do
   s <- S.socket S.AF_UNIX S.Stream S.defaultProtocol
   S.bindSocket s (S.SockAddrUnix path)
-  when setOwner . setOwnerAndGroupFromNames path GanetiLuxid $
-    ExtraGroup DaemonsGroup
+  when setOwner $ do
+    setOwnerAndGroupFromNames path GanetiLuxid $ ExtraGroup DaemonsGroup
+    setFileMode path $ fromIntegral luxiSocketPerms
   S.listen s 5 -- 5 is the max backlog
   return s