def user_ssh_add_key(username, key, comment): user = _get_user_for_ssh(username, ["homeDirectory", "uid"]) if not user: raise Exception("User with username '%s' doesn't exists" % username) authorized_keys_file = os.path.join(user["homeDirectory"][0], ".ssh", "authorized_keys") if not os.path.exists(authorized_keys_file): # ensure ".ssh" exists mkdir(os.path.join(user["homeDirectory"][0], ".ssh"), force=True, parents=True, uid=user["uid"][0]) # create empty file to set good permissions write_to_file(authorized_keys_file, "") chown(authorized_keys_file, uid=user["uid"][0]) chmod(authorized_keys_file, 0o600) authorized_keys_content = read_file(authorized_keys_file) authorized_keys_content += "\n" authorized_keys_content += "\n" if comment and comment.strip(): if not comment.lstrip().startswith("#"): comment = "# " + comment authorized_keys_content += comment.replace("\n", " ").strip() authorized_keys_content += "\n" authorized_keys_content += key.strip() authorized_keys_content += "\n" write_to_file(authorized_keys_file, authorized_keys_content)
def test_chown_recursive(test_file): current_uid = os.getuid() dirname = os.path.dirname(str(test_file)) mkdir(os.path.join(dirname, "new_dir")) chown(str(dirname), current_uid, recursive=True) assert os.stat(str(dirname)).st_uid == current_uid
def test_chown_exception(test_file, mocker): error = "foobar" mocker.patch("os.chown", side_effect=Exception(error)) with pytest.raises(MoulinetteError) as exception: chown(str(test_file), 1) translation = m18n.g( "error_changing_file_permissions", path=str(test_file), error=str(error) ) expected_msg = translation.format(path=str(test_file), error=str(error)) assert expected_msg in str(exception)
def set_permissions(f, owner, group, perms): chown(f, owner, group) chmod(f, perms)
def test_chown(test_file): with pytest.raises(ValueError): chown(str(test_file)) current_uid = os.getuid() current_gid = os.getgid() chown(str(test_file), current_uid, current_gid) assert os.stat(str(test_file)).st_uid == current_uid assert os.stat(str(test_file)).st_gid == current_gid current_gid = os.getgid() chown(str(test_file), uid=None, gid=current_gid) assert os.stat(str(test_file)).st_gid == current_gid current_uid = pwd.getpwuid(os.getuid())[0] current_gid = grp.getgrgid(os.getgid())[0] chown(str(test_file), current_uid, current_gid) assert os.stat(str(test_file)).st_uid == os.getuid() assert os.stat(str(test_file)).st_gid == os.getgid() fake_user = "******" with pytest.raises(MoulinetteError) as exception: chown(str(test_file), fake_user) translation = m18n.g("unknown_user", user=fake_user) expected_msg = translation.format(user=fake_user) assert expected_msg in str(exception) fake_grp = "nogrplol" with pytest.raises(MoulinetteError) as exception: chown(str(test_file), gid=fake_grp) translation = m18n.g("unknown_group", group=fake_grp) expected_msg = translation.format(group=fake_grp) assert expected_msg in str(exception)