Univention Bugzilla – Bug 57146
Broken Python2 compatibility in UDM
Last modified: 2024-03-18 14:03:23 CET
Created attachment 11202 [details] hotpatch With Bug #50385 a few refactorings for UDM have been done. One refactoring included a new module._get function, that returns the module if a string with the module name is given. In case the module itself is already given, it is returned as is. The code checks if the module it is given is of type str. In python2, this is not true because unicode is given. Therefore, later in the stack tracebacks happen, because the code expects to be given a module, but is presented with a unicode object. This happens when python2 UMC modules are executed. E.g. this is a traceback from a customer with the bildungslogin license module: Interner Server-Fehler in "licenses/import/get". Request: licenses/import/get Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/univention/management/console/base.py", line 387, in __error_handling six.reraise(etype, exc, etraceback) File "/usr/lib/python2.7/dist-packages/univention/management/console/base.py", line 285, in execute function.__func__(self, request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/decorators.py", line 189, in _response return function(self, request) File "/usr/lib/python2.7/dist-packages/ucsschool/lib/school_umc_ldap_connection.py", line 156, in wrapper_func return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/licenses/__init__.py", line 1023, in get_license self._import_licenses(license_handler, license_file, school) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/licenses/__init__.py", line 997, in _import_licenses import_license(license_handler, license) File "/usr/lib/python2.7/dist-packages/univention/bildungslogin/license_import/__init__.py", line 134, in import_license license_handler.create(license) File "/usr/lib/python2.7/dist-packages/univention/bildungslogin/handlers.py", line 76, in create udm_obj = self._licenses_mod.new() File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 565, in new return self._load_obj('', superordinate) File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 768, in _load_obj obj._copy_from_udm_obj() File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 342, in _copy_from_udm_obj self.position = self._udm_module._get_default_object_positions()[0] File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 662, in _get_default_object_positions default_containers = self._get_default_containers() File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 640, in _get_default_containers mod = GenericModule('settings/directory', self.connection, 0) File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 554, in __init__ self._orig_udm_module = self._get_orig_udm_module() File "/usr/lib/python2.7/dist-packages/univention/udm/modules/generic.py", line 691, in _get_orig_udm_module univention.admin.modules.init(self.connection, po, udm_module) File "/usr/lib/python2.7/dist-packages/univention/admin/modules.py", line 240, in init univention.admin.ucr_overwrite_properties(module, lo) File "/usr/lib/python2.7/dist-packages/univention/admin/__init__.py", line 73, in ucr_overwrite_properties ucr_prefix = ucr_property_prefix % module.module AttributeError: 'unicode' object has no attribute 'module' Attached is a proposed patch for that customer
UCS 5.0-6-errata: https://git.knut.univention.de/univention/ucs/-/merge_requests/1106 UCS 5.0-7-errata: https://git.knut.univention.de/univention/ucs/-/merge_requests/1105
UCS 5.0-6-errata: univention-directory-manager-modules.yaml 59e66191f240 | fix(udm): restore Python 2.7 compatibility univention-directory-manager-modules (15.0.25-26) 59e66191f240 | fix(udm): restore Python 2.7 compatibility UCS 5.0-7-errata: univention-directory-manager-modules.yaml f3e015288cb3 | fix(udm): restore Python 2.7 compatibility univention-directory-manager-modules (15.0.26-1) f3e015288cb3 | fix(udm): restore Python 2.7 compatibility
OK: python2 compatibility OK: Bildungslogin UMC license module works again OK: 5.0-7 OK: 5.0-6 Verified
<https://errata.software-univention.de/#/?erratum=5.0x994>
<https://errata.software-univention.de/#/?erratum=5.0x995>