Skip to content

Commit

Permalink
fix dodgy key writing issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
jonhadfield committed Jun 26, 2016
1 parent 128c439 commit bdbcf44
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
4 changes: 2 additions & 2 deletions lib/creds/ssh/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def read_authorized_keys(username=None):
authorized_keys_path = '{0}/.ssh/authorized_keys'.format(os.path.expanduser('~{0}'.format(username)))
if os.path.isfile(authorized_keys_path):
with open(authorized_keys_path) as keys_file:
for key in keys_file:
for count, key in enumerate(keys_file):
authorized_keys.append(PublicKey(raw=key))
return authorized_keys

Expand All @@ -27,7 +27,7 @@ def write_authorized_keys(user=None):
if not os.path.isdir(authorized_keys_dir):
execute_command(shlex.split(str('sudo mkdir -p {0}'.format(authorized_keys_dir))))
for key in user.public_keys:
authorized_keys.append(key.raw)
authorized_keys.append('{0}\n'.format(key.raw))
with open(tmp_authorized_keys_path, mode='w+') as keys_file:
keys_file.writelines(authorized_keys)
execute_command(shlex.split(str('sudo cp {0} {1}'.format(tmp_authorized_keys_path, authorized_keys_path))))
Expand Down
9 changes: 9 additions & 0 deletions lib/creds/user_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,16 @@ def compare_user(passed_user=None, user_list=None):
passed_keys = passed_user.public_keys
replace_keys = False
# Check if existing and passed keys exist, and if so, compare

print()
print('EXISTING KEYS = {0}'.format(existing_keys))
print('LEN EXISTING KEYS = {0}'.format(len(existing_keys)))
print('PASSED KEYS = {0}'.format(passed_keys))
print()


if all((existing_keys, passed_keys)) and len(existing_keys) == len(passed_user.public_keys):
print('EXISTING AND PASSED KEYS NUMBERS MATCH')
# Compare each key, and if any differences, replace
existing = set(key.raw for key in existing_keys)
replacement = set( key.raw for key in passed_keys )
Expand Down
11 changes: 8 additions & 3 deletions tests/sample_data.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
from __future__ import (absolute_import, unicode_literals, print_function)

from external.six.six import string_types

RAW_PUBLIC_KEY_1 = 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAqEi0oqNZlWqKlXqWHzwA5ydliXi9ips3B1r7NPCPNi293uJGl74JP/FRfNWgcjkw+c1/krBpeYZro44851fmv75uZ2Zc4HXCbJ/ZpRNqcLmyuUvDLN+khhTTFee8ybBcW0UoADGjs4EtKbDRCVLy4sQ8Nud0hpsuPk8j9XYhMkc='
ENCODED_PUBLIC_KEY_1 = 'c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBSUVBcUVpMG9xTlpsV3FLbFhxV0h6d0E1eWRsaVhpOWlwczNCMXI3TlBDUE5pMjkzdUpHbDc0SlAvRlJmTldnY2prdytjMS9rckJwZVlacm80NDg1MWZtdjc1dVoyWmM0SFhDYkovWnBSTnFjTG15dVV2RExOK2toaFRURmVlOHliQmNXMFVvQURHanM0RXRLYkRSQ1ZMeTRzUThOdWQwaHBzdVBrOGo5WFloTWtjPQ=='

RAW_PUBLIC_KEY_2 = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDji5ycWzabILAmwO7u4aI8CotFpKSj0pcV5EwjYT7CINcS+Sh1mBJcdpGDa/8d/sSpnTmizXI3Y0Rdh/TzvcbUoxzyI8pcka+WijJ0nTf1gtQ/thgu3LgU8lFXFIVtTcXu/9kd0KzJEAb00XsIVNIV6fEgef1dbzxm2LdKP4pGCy4/25lhCUrHKaajjBPFsOedDfYfrWdAbjDW0X0cT2ayQ5uoidv+J3rjejS9EL7zeo+pHyTGWYp/CvJojIDZmrMbopluJMfbqA8SpL2VxXLEgP5Jz0VDNCnLKCK6vIbhMkIX8lE5gCb978xp5cVNv1qVAaXVRxixXlAWvYVY0Htn'
ENCODE_PUBLIC_KEY_2 = 'c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFEamk1eWNXemFiSUxBbXdPN3U0YUk4Q290RnBLU2owcGNWNUV3allUN0NJTmNTK1NoMW1CSmNkcEdEYS84ZC9zU3BuVG1pelhJM1kwUmRoL1R6dmNiVW94enlJOHBja2ErV2lqSjBuVGYxZ3RRL3RoZ3UzTGdVOGxGWEZJVnRUY1h1LzlrZDBLekpFQWIwMFhzSVZOSVY2ZkVnZWYxZGJ6eG0yTGRLUDRwR0N5NC8yNWxoQ1VySEthYWpqQlBGc09lZERmWWZyV2RBYmpEVzBYMGNUMmF5UTV1b2lkditKM3JqZWpTOUVMN3plbytwSHlUR1dZcC9DdkpvaklEWm1yTWJvcGx1Sk1mYnFBOFNwTDJWeFhMRWdQNUp6MFZETkNuTEtDSzZ2SWJoTWtJWDhsRTVnQ2I5Nzh4cDVjVk52MXFWQWFYVlJ4aXhYbEFXdllWWTBIdG4='

RAW_PUBLIC_KEY_3 = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1TOE/w1BKqh2vaGfwqJLADaHDkMPDf25W/wj0/53NB9/EWJ08EqFuny869Jpu4LA7UhXoz4aECBDvk9VzTimcDtJdLtmPmr+F5lOzVOiKUfdwVvjp1fOnme9ObDMJ/kJv/2gtzrVSNSCmt9NdFQRLMsjz4EHLAesriOVjdZcUeBKAQH8FzWZbu2EgW5z2PdJJa6UQQj4GE6R8y4/3zoh4lZ94c/6Fi4DeehgKRGO5tIY2FwhrNIGb0BKq3FwjHHSHM8rdo707uXQZWizeRorCYPhvHxkOh9G6WJIXbQUzs6Qy2EppDgv7qkzcNmTIIICnsuCI+w4uO1yynZvqsuov bob@example.com'
ENCODE_PUBLIC_KEY_3 = 'c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFDMVRPRS93MUJLcWgydmFHZndxSkxBRGFIRGtNUERmMjVXL3dqMC81M05COS9FV0owOEVxRnVueTg2OUpwdTRMQTdVaFhvejRhRUNCRHZrOVZ6VGltY0R0SmRMdG1QbXIrRjVsT3pWT2lLVWZkd1Z2anAxZk9ubWU5T2JETUova0p2LzJndHpyVlNOU0NtdDlOZEZRUkxNc2p6NEVITEFlc3JpT1ZqZFpjVWVCS0FRSDhGeldaYnUyRWdXNXoyUGRKSmE2VVFRajRHRTZSOHk0LzN6b2g0bFo5NGMvNkZpNERlZWhnS1JHTzV0SVkyRndock5JR2IwQktxM0Z3akhIU0hNOHJkbzcwN3VYUVpXaXplUm9yQ1lQaHZIeGtPaDlHNldKSVhiUVV6czZReTJFcHBEZ3Y3cWt6Y05tVElJSUNuc3VDSSt3NHVPMXl5blp2cXN1b3YgYm9iQGV4YW1wbGUuY29t'

RAW_PUBLIC_KEY_4 = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDReC3ARgYneNaffqPM1wSS538gw+d5+ydZgw81EfHZEhYDr3CNa22+kMhqW11GSFBvzUJnz+gonYANNzdQqam6QviLVdKwa9nRU+AiJQuq8DOIt+bAU8fiLiPulQwK6PQH4GvZmE6l0WYRQTK7oUlhrU3wrD0mf7N1HyOwKhINLk13/xn1UXkBi57ejl7Ub4s/yzn6VwOL1yI41bd/gHkH90pWLKfVwCBCzfii7u5pdQYhoSqXFaLjCN4OtzSj4vBT88gHSUp9EdHHpC85xykkg+ixF2kWcf/Hl/Jyt0FzSmOw3reo68BIEP/VecTex1hk+EoR22y40ucVRPW73eFf jeff@example.com'
ENCODE_PUBLIC_KEY_4 = 'c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFEUmVDM0FSZ1luZU5hZmZxUE0xd1NTNTM4Z3crZDUreWRaZ3c4MUVmSFpFaFlEcjNDTmEyMitrTWhxVzExR1NGQnZ6VUpueitnb25ZQU5OemRRcWFtNlF2aUxWZEt3YTluUlUrQWlKUXVxOERPSXQrYkFVOGZpTGlQdWxRd0s2UFFINEd2Wm1FNmwwV1lSUVRLN29VbGhyVTN3ckQwbWY3TjFIeU93S2hJTkxrMTMveG4xVVhrQmk1N2VqbDdVYjRzL3l6bjZWd09MMXlJNDFiZC9nSGtIOTBwV0xLZlZ3Q0JDemZpaTd1NXBkUVlob1NxWEZhTGpDTjRPdHpTajR2QlQ4OGdIU1VwOUVkSEhwQzg1eHlra2craXhGMmtXY2YvSGwvSnl0MEZ6U21PdzNyZW82OEJJRVAvVmVjVGV4MWhrK0VvUjIyeTQwdWNWUlBXNzNlRmYgamVmZkBleGFtcGxlLmNvbQ=='

PUBLIC_KEYS = (
dict(encoded=ENCODED_PUBLIC_KEY_1, raw=RAW_PUBLIC_KEY_1), dict(encoded=ENCODE_PUBLIC_KEY_2, raw=RAW_PUBLIC_KEY_2))
dict(encoded=ENCODED_PUBLIC_KEY_1, raw=RAW_PUBLIC_KEY_1), dict(encoded=ENCODE_PUBLIC_KEY_2, raw=RAW_PUBLIC_KEY_2),
dict(encoded=ENCODE_PUBLIC_KEY_3, raw=RAW_PUBLIC_KEY_3), dict(encoded=ENCODE_PUBLIC_KEY_4, raw=RAW_PUBLIC_KEY_4))
32 changes: 32 additions & 0 deletions tests/test_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,43 @@ def test_execute_plan_to_update_existing_user():
delete_test_user_and_group()


def test_execute_plan_to_update_existing_user_with_multiple_keys():
""" Create a new user with 2 keys and then replace with a new one """
create_test_user()
raw_public_key_1 = PUBLIC_KEYS[0].get('raw')
public_key_1 = PublicKey(raw=raw_public_key_1)
raw_public_key_2 = PUBLIC_KEYS[1].get('raw')
public_key_2 = PublicKey(raw=raw_public_key_2)
raw_public_key_3 = PUBLIC_KEYS[2].get('raw')
public_key_3 = PublicKey(raw=raw_public_key_3)
raw_public_key_4 = PUBLIC_KEYS[3].get('raw')
public_key_4 = PublicKey(raw=raw_public_key_4)
current_users = Users.from_passwd()
provided_users_2 = list()
provided_users_2.append(
User(name='testuserx1234', uid=59998, gid=1, gecos='test user gecos update',
shell='/bin/false', public_keys=[public_key_1, public_key_2]))
plan = create_plan(existing_users=current_users, proposed_users=provided_users_2)
execute_plan(plan=plan)
updated_users = Users.from_passwd()
updated_user = updated_users.describe_users(users_filter=dict(name='testuserx1234'))
assert len(updated_user) == 1
assert updated_user[0].name == 'testuserx1234'
assert updated_user[0].uid == 59998
assert updated_user[0].gid == 1
assert updated_user[0].gecos == '\"test user gecos update\"'
assert updated_user[0].shell == '/bin/false'
assert updated_user[0].public_keys[0].raw == six.text_type(PUBLIC_KEYS[0]['raw'])
delete_test_user_and_group()


def delete_test_user_and_group():
del_user_command = shlex.split(str('{0} {1} -r -f testuserx1234'.format(SUDO, USERDEL)))
execute_command(command=del_user_command)
del_group_command = shlex.split(str('{0} {1} testuserx1234'.format(SUDO, GROUPDEL)))
execute_command(command=del_group_command)
del_user_ssh_dir_command = shlex.split(str('/bin/rm -rf /tmp/.ssh'))
execute_command(command=del_user_ssh_dir_command)


def create_test_user():
Expand Down

0 comments on commit bdbcf44

Please sign in to comment.