Explorar el Código

Adds password for temp key serialization

Alessandro Pilotti hace 9 años
padre
commit
6b2c30cb79
Se han modificado 2 ficheros con 18 adiciones y 6 borrados
  1. 14 2
      coriolis/tasks/replica_tasks.py
  2. 4 4
      coriolis/utils.py

+ 14 - 2
coriolis/tasks/replica_tasks.py

@@ -7,8 +7,18 @@ from coriolis import schemas
 from coriolis.tasks import base
 from coriolis import utils
 
+from oslo_config import cfg
 from oslo_log import log as logging
 
+serialization_opts = [
+    cfg.StrOpt('temp_keypair_password',
+               default=None,
+               help='Password to be used when serializing temporary keys'),
+]
+
+CONF = cfg.CONF
+CONF.register_opts(serialization_opts, 'serialization')
+
 LOG = logging.getLogger(__name__)
 
 
@@ -16,7 +26,8 @@ def _marshal_migr_conn_info(migr_connection_info):
     if migr_connection_info and "pkey" in migr_connection_info:
         migr_connection_info = migr_connection_info.copy()
         migr_connection_info["pkey"] = utils.serialize_key(
-            migr_connection_info["pkey"])
+            migr_connection_info["pkey"],
+            CONF.serialization.temp_keypair_password)
     return migr_connection_info
 
 
@@ -24,7 +35,8 @@ def _unmarshal_migr_conn_info(migr_connection_info):
     if migr_connection_info and "pkey" in migr_connection_info:
         migr_connection_info = migr_connection_info.copy()
         pkey_str = migr_connection_info["pkey"]
-        migr_connection_info["pkey"] = utils.deserialize_key(pkey_str)
+        migr_connection_info["pkey"] = utils.deserialize_key(
+            pkey_str, CONF.serialization.temp_keypair_password)
     return migr_connection_info
 
 

+ 4 - 4
coriolis/utils.py

@@ -251,15 +251,15 @@ def get_resources_dir():
     return os.path.join(_get_base_dir(), "resources")
 
 
-def serialize_key(key):
+def serialize_key(key, password=None):
     key_io = io.StringIO()
-    key.write_private_key(key_io)
+    key.write_private_key(key_io, password)
     return key_io.getvalue()
 
 
-def deserialize_key(key_bytes):
+def deserialize_key(key_bytes, password=None):
     key_io = io.StringIO(key_bytes)
-    return paramiko.RSAKey.from_private_key(key_io)
+    return paramiko.RSAKey.from_private_key(key_io, password)
 
 
 def is_serializable(obj):