Univention Bugzilla – Bug 51113
Traceback TypeError: must be conjunction, got 'expression'
Last modified: 2020-09-29 12:46:02 CEST
Schritte, um den Fehler zu reproduzieren Klick auf Devices/Computer-Kachel erwartetes Ergebnis Liste der Comuter di auch im LDAP zu sehen sind beobachtetes Ergebnis Fhlermeil welche nachfolgenden trace beinhaltet: ---------- UCS Version: 4.4-4 errata525 (Blumenthal) Interner Server-Fehler in "udm/query (computers/computer)". TypeError: must be conjunction, got 'expression' ("expression('fqdn', '', '=')") raise TypeError('must be conjunction, got %r (%r)' % (type(con).__name__, repr(con))) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 139, in transform_to_conjunction filter.transform_to_conjunction(univention.admin.filter.parse(univention.admin.filter.replace_fqdn_filter(str(filter)))) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/__base.py", line 335, in rewrite_filter expression_walk_function(filter, arg) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 251, in walk walk(e, expression_walk_function, conjunction_walk_function, arg) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 246, in walk walk(filter_p, rewrite_function, arg=mapping) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 85, in append_unmapped_filter_string lookup_filter_obj.append_unmapped_filter_string(filter_s, functools.partial(cls.rewrite_filter, lo=lo), module.mapping) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/__base.py", line 344, in lookup_filter con = super(object, cls).lookup_filter(filter_s, lo) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/windows_domaincontroller.py", line 290, in lookup_filter filter_s = cls.lookup_filter(filter_s, lo) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1733, in lookup res.extend(computer.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/computer.py", line 130, in lookup result = self.module.lookup(None, ldap_connection, filter_s, base=container, superordinate=superordinate, scope=scope, sizelimit=sizelimit, **kwargs) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/udm_ldap.py", line 681, in search result = module.search(container, objectProperty, objectPropertyValue, superordinate, scope=scope, hidden=hidden) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/__init__.py", line 605, in _thread return self._function(*tmp, **self._kwargs) File "/usr/lib/python2.7/dist-packages/notifier/__init__.py", line 104, in __call__ result = self._function() File "/usr/lib/python2.7/dist-packages/notifier/threads.py", line 80, in _run Request: udm/query (computers/computer) Interner Server-Fehler in "udm/query (computers/computer)".
reported again: Version: 4.4-4 errata525 (Blumenthal) Internal server error during "udm/query (computers/computer)". Request: udm/query (computers/computer) File "/usr/lib/python2.7/dist-packages/notifier/threads.py", line 80, in _run result = self._function() File "/usr/lib/python2.7/dist-packages/notifier/__init__.py", line 104, in __call__ return self._function(*tmp, **self._kwargs) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/__init__.py", line 605, in _thread result = module.search(container, objectProperty, objectPropertyValue, superordinate, scope=scope, hidden=hidden) File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/udm_ldap.py", line 681, in search result = self.module.lookup(None, ldap_connection, filter_s, base=container, superordinate=superordinate, scope=scope, sizelimit=sizelimit, **kwargs) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/computer.py", line 130, in lookup res.extend(computer.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1733, in lookup filter_s = cls.lookup_filter(filter_s, lo) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/windows_domaincontroller.py", line 290, in lookup_filter con = super(object, cls).lookup_filter(filter_s, lo) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/__base.py", line 344, in lookup_filter lookup_filter_obj.append_unmapped_filter_string(filter_s, functools.partial(cls.rewrite_filter, lo=lo), module.mapping) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 85, in append_unmapped_filter_string walk(filter_p, rewrite_function, arg=mapping) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 246, in walk walk(e, expression_walk_function, conjunction_walk_function, arg) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 251, in walk expression_walk_function(filter, arg) File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/computers/__base.py", line 335, in rewrite_filter filter.transform_to_conjunction(univention.admin.filter.parse(univention.admin.filter.replace_fqdn_filter(str(filter)))) File "/usr/lib/python2.7/dist-packages/univention/admin/filter.py", line 139, in transform_to_conjunction raise TypeError('must be conjunction, got %r (%r)' % (type(con).__name__, repr(con))) TypeError: must be conjunction, got 'expression' ("expression('fqdn', '', '=')") Role: domaincontroller_master
To reproduce this on the umc, the following ucr variable needs to be set: `ucr set directory/manager/web/auto_substring_search=false` Now open the computer module This can also be reproduced directly with udm: `udm computers/linux list --filter "(fqdn=)"`
Workaround/Hotfix: diff --git management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/__base.py management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/__base.py index e3ef4144e6..572849989f 100644 --- management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/__base.py +++ management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/__base.py @@ -331,7 +331,7 @@ class ComputerObject(univention.admin.handlers.simpleComputer, nagios.Support): else: filter.variable = found.variable filter.value = found.value - elif filter.variable == 'fqdn': + elif filter.variable == 'fqdn' and filter.value: filter.transform_to_conjunction(univention.admin.filter.parse(univention.admin.filter.replace_fqdn_filter(str(filter)))) else: super(ComputerObject, cls).rewrite_filter(filter, mapping