Bug 57146 - Broken Python2 compatibility in UDM
Broken Python2 compatibility in UDM
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: UDM (Generic)
UCS 5.0
Other Linux
: P5 normal (vote)
: UCS 5.0-6-errata
Assigned To: Florian Best
Julia Bremer
https://git.knut.univention.de/univen...
:
Depends on: 50385
Blocks:
  Show dependency treegraph
 
Reported: 2024-03-14 09:01 CET by Julia Bremer
Modified: 2024-03-18 14:03 CET (History)
3 users (show)

See Also:
What kind of report is it?: Bug Report
What type of bug is this?: 5: Major Usability: Impairs usability in key scenarios
Who will be affected by this bug?: 1: Will affect a very few installed domains
How will those affected feel about the bug?: 4: A User would return the product
User Pain: 0.114
Enterprise Customer affected?: Yes
School Customer affected?: Yes
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number: 2024031321000172
Bug group (optional): Regression
Max CVSS v3 score:


Attachments
hotpatch (610 bytes, patch)
2024-03-14 09:01 CET, Julia Bremer
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Julia Bremer univentionstaff 2024-03-14 09:01:04 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
Comment 2 Florian Best univentionstaff 2024-03-15 13:54:10 CET
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
Comment 3 Julia Bremer univentionstaff 2024-03-15 18:16:25 CET
OK: python2 compatibility
OK: Bildungslogin UMC license module works again
OK: 5.0-7
OK: 5.0-6
Verified