Bug 51113 - Traceback TypeError: must be conjunction, got 'expression'
Traceback TypeError: must be conjunction, got 'expression'
Status: NEW
Product: UCS
Classification: Unclassified
Component: UMC - Computers
UCS 4.4
Other Linux
: P5 normal (vote)
: ---
Assigned To: UMC maintainers
UMC maintainers
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2020-04-17 11:11 CEST by Ingo Steuwer
Modified: 2020-09-29 12:46 CEST (History)
3 users (show)

See Also:
What kind of report is it?: Bug Report
What type of bug is this?: 3: Simply Wrong: The implementation doesn't match the docu
Who will be affected by this bug?: 2: Will only affect a few installed domains
How will those affected feel about the bug?: 2: A Pain – users won’t like this once they notice it
User Pain: 0.069
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number: 2020041221000652, 2020041121000323, 2020031021000407, 2020041221000214, 2020041221000251, 2020041221000269, 2020041221000376, 2020041221000385, 2020041221000643, 2020041221000689, 2020041221000705, 2020041221000723
Bug group (optional): External feedback
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ingo Steuwer univentionstaff 2020-04-17 11:11:52 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)".
Comment 1 Christian Castens univentionstaff 2020-05-18 10:23:06 CEST
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
Comment 2 Jürn Brodersen univentionstaff 2020-05-26 15:32:08 CEST
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=)"`
Comment 3 Florian Best univentionstaff 2020-05-26 16:13:07 CEST
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