diff options
author | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-06-21 12:30:32 -0700 |
---|---|---|
committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-06-21 12:30:32 -0700 |
commit | 081d0cb81213f69a51cbcce9063d2e0792bb5e34 (patch) | |
tree | fdf6b0b85a9b2a3f8a12f2b4207b4cc0082283c9 /cloudinit/ssh_util.py | |
parent | b22e8132dc7719fd7f60a26145edf1335495dee1 (diff) | |
download | vyos-cloud-init-081d0cb81213f69a51cbcce9063d2e0792bb5e34.tar.gz vyos-cloud-init-081d0cb81213f69a51cbcce9063d2e0792bb5e34.zip |
Simplify sshd config loading to make it use one set of functions/objects/classes
Diffstat (limited to 'cloudinit/ssh_util.py')
-rw-r--r-- | cloudinit/ssh_util.py | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/cloudinit/ssh_util.py b/cloudinit/ssh_util.py index 45dd5535..fc8b9b3d 100644 --- a/cloudinit/ssh_util.py +++ b/cloudinit/ssh_util.py @@ -29,6 +29,8 @@ from cloudinit import log as logging from cloudinit import util LOG = logging.getLogger(__name__) + +# See: man sshd_config DEF_SSHD_CFG = "/etc/ssh/sshd_config" @@ -233,7 +235,7 @@ def setup_user_keys(keys, user, key_prefix, paths): # The following tokens are defined: %% is replaced by a literal # '%', %h is replaced by the home directory of the user being # authenticated and %u is replaced by the username of that user. - ssh_cfg = parse_ssh_config(sshd_conf_fn) + ssh_cfg = parse_ssh_config_map(sshd_conf_fn) akeys = ssh_cfg.get("authorizedkeysfile", '') akeys = akeys.strip() if not akeys: @@ -258,19 +260,54 @@ def setup_user_keys(keys, user, key_prefix, paths): util.chownbyid(authorized_keys, pwent.pw_uid, pwent.pw_gid) +class SshdConfigLine(object): + def __init__(self, line, k=None, v=None): + self.line = line + self._key = k + self.value = v + + @property + def key(self): + if self._key is None: + return None + # Keywords are case-insensitive + return self._key.lower() + + def __str__(self): + if self._key is None: + return str(self.line) + else: + v = str(self._key) + if self.value: + v += " " + str(self.value) + return v + + def parse_ssh_config(fname): + # See: man sshd_config # The file contains keyword-argument pairs, one per line. # Lines starting with '#' and empty lines are interpreted as comments. # Note: key-words are case-insensitive and arguments are case-sensitive - ret = {} + lines = [] if not os.path.isfile(fname): - return ret + return lines for line in util.load_file(fname).splitlines(): line = line.strip() if not line or line.startswith("#"): + lines.append(SshdConfigLine(line)) continue (key, val) = line.split(None, 1) - key = key.strip().lower() - if key: - ret[key] = val + lines.append(SshdConfigLine(line, key, val)) + return lines + + +def parse_ssh_config_map(fname): + lines = parse_ssh_config(fname) + if not lines: + return {} + ret = {} + for line in lines: + if not line.key: + continue + ret[line.key] = line.value return ret |