mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-25 16:31:08 -06:00
7b77fef75a
Ensure that attributes and objectclasses are case-insensitive. https://pagure.io/freeipa/issue/8415 Signed-off-by: Rob Crittenden <rcritten@redhat.com> Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
#
|
|
# Copyright (C) 2021 FreeIPA Contributors see COPYING for license
|
|
#
|
|
"""Tests for custom plugins
|
|
"""
|
|
from __future__ import absolute_import
|
|
|
|
import logging
|
|
import os
|
|
import site
|
|
|
|
from ipatests.test_integration.base import IntegrationTest
|
|
from ipatests.pytest_ipa.integration import tasks
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestCustomPlugin(IntegrationTest):
|
|
"""
|
|
Tests for user-generated custom plugins
|
|
"""
|
|
@classmethod
|
|
def install(cls, mh):
|
|
tasks.install_master(cls.master, setup_dns=True)
|
|
|
|
def test_add_user_objectclass_with_custom_schema(self):
|
|
"""Test adding a custom userclass to new users
|
|
|
|
Attributes should not be case-sensitive.
|
|
|
|
Based heavily on the custom plugin and schema at
|
|
https://github.com/Brandeis-CS-Systems/idm-unet-id-plugin
|
|
"""
|
|
schema = (
|
|
"dn: cn=schema\n"
|
|
"attributeTypes: ( 2.16.840.1.113730.3.8.24.1.1 NAME 'customID' "
|
|
"EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX "
|
|
"1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Testing' )\n"
|
|
"objectClasses: ( 2.16.840.1.113730.3.8.24.2.1 NAME 'customUser' "
|
|
"DESC 'custom user ID objectClass' AUXILIARY MAY ( customID ) "
|
|
"X-ORIGIN 'Testing' )\n"
|
|
)
|
|
plugin = (
|
|
"from ipalib.parameters import Str\n\n"
|
|
"from ipaserver.plugins.user import user\n\n"
|
|
"if 'customUser' not in user.possible_objectclasses:\n"
|
|
" user.possible_objectclasses.append('customUser')\n"
|
|
"customuser_attributes = ['customID']\n"
|
|
"user.default_attributes.extend(customuser_attributes)\n"
|
|
"takes_params = (\n"
|
|
" Str('customid?',\n"
|
|
" cli_name='customid',\n"
|
|
" maxlength=64,\n"
|
|
" label='User custom uid'),\n"
|
|
")\n"
|
|
"user.takes_params += takes_params\n"
|
|
)
|
|
|
|
tasks.kinit_admin(self.master)
|
|
self.master.put_file_contents('/tmp/schema.ldif', schema)
|
|
self.master.run_command(['ipa-ldap-updater', '-S', '/tmp/schema.ldif'])
|
|
self.master.put_file_contents('/tmp/schema.ldif', schema)
|
|
|
|
site_packages = site.getsitepackages()[-1]
|
|
site_file = os.path.join(
|
|
site_packages, "ipaserver", "plugins", "test.py"
|
|
)
|
|
|
|
self.master.put_file_contents(site_file, plugin)
|
|
|
|
self.master.run_command(['ipactl', 'restart'])
|
|
|
|
self.master.run_command([
|
|
'ipa', 'config-mod',
|
|
'--userobjectclasses', 'top',
|
|
'--userobjectclasses', 'person',
|
|
'--userobjectclasses', 'organizationalperson',
|
|
'--userobjectclasses', 'inetorgperson',
|
|
'--userobjectclasses', 'inetuser',
|
|
'--userobjectclasses', 'posixaccount',
|
|
'--userobjectclasses', 'krbprincipalaux',
|
|
'--userobjectclasses', 'krbticketpolicyaux',
|
|
'--userobjectclasses', 'ipaobject',
|
|
'--userobjectclasses', 'ipasshuser',
|
|
'--userobjectclasses', 'customuser',
|
|
])
|
|
|
|
self.master.run_command(['rm', '-f', site_file])
|