[cloud-init] Fix ssh key printing

gholms gholms at fedoraproject.org
Sun Sep 23 02:54:01 UTC 2012


commit bb974cc9d25136601650ea6be48aa74094fd491f
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Sat Sep 22 17:50:21 2012 -0700

    Fix ssh key printing

 cloud-init-0.7.0-ssh-key-users.patch |   79 ++++++++++++++++++++++++++++++++++
 cloud-init.spec                      |    5 ++
 2 files changed, 84 insertions(+), 0 deletions(-)
---
diff --git a/cloud-init-0.7.0-ssh-key-users.patch b/cloud-init-0.7.0-ssh-key-users.patch
new file mode 100644
index 0000000..db11b09
--- /dev/null
+++ b/cloud-init-0.7.0-ssh-key-users.patch
@@ -0,0 +1,79 @@
+Index: trunk/cloudinit/config/cc_ssh_authkey_fingerprints.py
+===================================================================
+--- trunk.orig/cloudinit/config/cc_ssh_authkey_fingerprints.py
++++ trunk/cloudinit/config/cc_ssh_authkey_fingerprints.py
+@@ -21,7 +21,8 @@ import hashlib
+ 
+ from prettytable import PrettyTable
+ 
+-from cloudinit import ssh_util
++from cloudinit.ssh_util import extract_authorized_keys as eak
++
+ from cloudinit import util
+ 
+ 
+@@ -40,8 +41,9 @@ def _gen_fingerprint(b64_text, hash_meth
+         hasher = hashlib.new(hash_meth)
+         hasher.update(base64.b64decode(b64_text))
+         return ":".join(_split_hash(hasher.hexdigest()))
+-    except TypeError:
+-        # Raised when b64 not really b64...
++    except (TypeError, ValueError):
++        # Raised when b64 not really b64... or
++        # when the hash type isn't valid
+         return '?'
+ 
+ 
+@@ -84,13 +86,48 @@ def _pprint_key_entries(user, key_fn, ke
+                        stderr=False, console=True)
+ 
+ 
++def translate_user_name(uname, distro, log):
++    if not uname:
++        uname = ''
++    uname = uname.strip()
++    real_name = None
++    if uname.lower() == 'default':
++        try:
++            real_name = distro.get_default_user()
++        except NotImplementedError:
++            log.warn("Distro has not implemented default user "
++                     "creation. No default user will be translated.")
++    else:
++        real_name = uname
++    return real_name
++
++
+ def handle(name, cfg, cloud, log, _args):
+     if 'no_ssh_fingerprints' in cfg:
+         log.debug(("Skipping module named %s, "
+                    "logging of ssh fingerprints disabled"), name)
++        return
++
++    if not 'users' in cfg:
++        log.debug(("Skipping module named %s, "
++                   "logging of ssh fingerprints disabled "
++                   "since no user/s provided"), name)
++        return
++
++    users_to_hash = []
++    for user_config in cfg['users']:
++        user_name = None
++        if isinstance(user_config, (basestring, str)):
++            user_name = translate_user_name(user_config, cloud.distro, log)
++        elif isinstance(user_config, (dict)):
++            if 'name' in user_config:
++                user_name = translate_user_name(user_config['name'],
++                                                cloud.distro, log)
++        if user_name:
++            users_to_hash.append(user_name)
+ 
+-    user_name = util.get_cfg_option_str(cfg, "user", "ubuntu")
+     hash_meth = util.get_cfg_option_str(cfg, "authkey_hash", "md5")
+-    extract = ssh_util.extract_authorized_keys
+-    (auth_key_fn, auth_key_entries) = extract(user_name, cloud.paths)
+-    _pprint_key_entries(user_name, auth_key_fn, auth_key_entries, hash_meth)
++    for user_name in users_to_hash:
++        (auth_key_fn, auth_key_entries) = eak(user_name, cloud.paths)
++        _pprint_key_entries(user_name, auth_key_fn,
++                            auth_key_entries, hash_meth)
diff --git a/cloud-init.spec b/cloud-init.spec
index b7db61a..02ec336 100644
--- a/cloud-init.spec
+++ b/cloud-init.spec
@@ -16,6 +16,9 @@ Patch0:         cloud-init-0.7.0-fedora.patch
 # Make Fedora use the same hostname-updating code as Debian (/etc/hostname)
 # https://code.launchpad.net/~gholms/cloud-init/hostname-refactor/+merge/125869
 Patch1:         cloud-init-0.7.0-hostname-refactor.patch
+# Fix fingerprint printing caused by recent user code refactoring
+# https://code.launchpad.net/~harlowja/cloud-init/patch-ssh-key-users/+merge/125606
+Patch2:         cloud-init-0.7.0-ssh-key-users.patch
 
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -52,6 +55,7 @@ ssh keys and to let the user run various scripts.
 %setup -q -n %{name}-%{version}-bzr659
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
 
 cp -p %{SOURCE2} README.fedora
 
@@ -132,6 +136,7 @@ fi
 * Sat Sep 22 2012 Garrett Holmstrom <gholms at fedoraproject.org> - 0.7.0-0.2.bzr659
 - Rebased against upstream rev 659
 - Fixed hostname persistence
+- Fixed ssh key printing
 
 * Mon Sep 17 2012 Garrett Holmstrom <gholms at fedoraproject.org> - 0.7.0-0.1.bzr650
 - Rebased against upstream rev 650


More information about the scm-commits mailing list