Fix #33 - parse config as described by manpage
(cherry picked from commit 011805eae07ee7be6140b95f6d8669763c55b3d9)
This commit is contained in:
parent
d3dc9fcb19
commit
d18b8cf1e9
|
@ -104,11 +104,16 @@ class SSHConfig (object):
|
|||
@type hostname: str
|
||||
"""
|
||||
matches = [x for x in self._config if fnmatch.fnmatch(hostname, x['host'])]
|
||||
# sort in order of shortest match (usually '*') to longest
|
||||
matches.sort(lambda x,y: cmp(len(x['host']), len(y['host'])))
|
||||
# Move * to the end
|
||||
_star = matches[0]
|
||||
del matches[0]
|
||||
matches.append(_star)
|
||||
ret = {}
|
||||
ret = {}
|
||||
for m in matches:
|
||||
ret.update(m)
|
||||
for k,v in m.iteritems():
|
||||
if not k in ret:
|
||||
ret[k] = v
|
||||
ret = self._expand_variables(ret, hostname)
|
||||
del ret['host']
|
||||
return ret
|
||||
|
|
|
@ -159,3 +159,21 @@ class UtilTest (unittest.TestCase):
|
|||
x = rng.read(32)
|
||||
self.assertEquals(len(x), 32)
|
||||
|
||||
def test_7_host_config_expose_issue_33(self):
|
||||
test_config_file = """
|
||||
Host www13.*
|
||||
Port 22
|
||||
|
||||
Host *.example.com
|
||||
Port 2222
|
||||
|
||||
Host *
|
||||
Port 3333
|
||||
"""
|
||||
f = cStringIO.StringIO(test_config_file)
|
||||
config = ssh.util.parse_ssh_config(f)
|
||||
host = 'www13.example.com'
|
||||
self.assertEquals(
|
||||
ssh.util.lookup_ssh_host_config(host, config),
|
||||
{'hostname': host, 'port': '22'}
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue