Ver Fonte

judge manager before unlocking

Signed-off-by: allencloud <allen.sun@daocloud.io>
(cherry picked from commit 972a246c671b52786a5e57743babfcf7b5b5ae99)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
allencloud há 8 anos atrás
pai
commit
cd587419d0
1 ficheiros alterados com 9 adições e 0 exclusões
  1. 9 0
      daemon/cluster/cluster.go

+ 9 - 0
daemon/cluster/cluster.go

@@ -587,6 +587,15 @@ func (c *Cluster) GetUnlockKey() (string, error) {
 
 
 // UnlockSwarm provides a key to decrypt data that is encrypted at rest.
 // UnlockSwarm provides a key to decrypt data that is encrypted at rest.
 func (c *Cluster) UnlockSwarm(req types.UnlockRequest) error {
 func (c *Cluster) UnlockSwarm(req types.UnlockRequest) error {
+	c.RLock()
+	if !c.isActiveManager() {
+		if err := c.errNoManager(); err != ErrSwarmLocked {
+			c.RUnlock()
+			return err
+		}
+	}
+	c.RUnlock()
+
 	key, err := encryption.ParseHumanReadableKey(req.UnlockKey)
 	key, err := encryption.ParseHumanReadableKey(req.UnlockKey)
 	if err != nil {
 	if err != nil {
 		return err
 		return err