Univention Bugzilla – Bug 31494
Unable to search for dnsAlias in computers/* modules
Last modified: 2019-04-17 14:07:22 CEST
Searching for dnsAlias does not work if the ldap filter does not contain a bracket. I think that is the default while searching via UMC: root@master511:~# udm computers/domaincontroller_slave list --filter 'dnsAlias=foo*' dnsAlias=foo* root@master511:~# udm computers/domaincontroller_slave list --filter '(dnsAlias=foo*)' | grep ^DN DN: cn=slave513,cn=dc,cn=computers,dc=deadlock51,dc=local root@master511:~# The error is in the lookup function: if str(filter_s).find('(dnsAlias=') != -1:
Created attachment 9092 [details] patch Attached patch fixes this and some more errors: A filter like "(dnsAlias=foo,bar)" caused the following Traceback in UMC: Execution of command 'udm/query computers/computer' has failed: Traceback (most recent call last): File "%PY2.7%/notifier/threads.py", line 82, in _run tmp = self._function() File "%PY2.7%/notifier/__init__.py", line 104, in __call__ return self._function( *tmp, **self._kwargs ) File "%PY2.7%/univention/management/console/modules/udm/__init__.py", line 563, in _thread result = module.search(container, objectProperty, objectPropertyValue, superordinate, scope=scope, hidden=hidden) File "%PY2.7%/univention/management/console/modules/udm/udm_ldap.py", line 82, in _decorated return method(*args, **kwargs) File "%PY2.7%/univention/management/console/ldap.py", line 143, in _decorated result = func(*args, **kwargs) File "%PY2.7%/univention/management/console/modules/udm/udm_ldap.py", line 484, in search result = self.module.lookup(None, ldap_connection, filter_s, base=container, superordinate=superordinate, scope=scope, sizelimit=sizelimit) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 682, in lookup filter = lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) … File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 665, in lookup_filter return lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 663, in lookup_filter filter_s = univention.admin.handlers.dns.alias.lookup_alias_filter(lo, filter_s) File "%PY2.7%/univention/admin/handlers/dns/alias.py", line 169, in lookup_alias_filter _re = re.compile('(.*)\(dnsAlias=([^=,]+)\)(.*)') File "/usr/lib/python2.7/re.py", line 194, in compile return _compile(pattern, flags) File "/usr/lib/python2.7/re.py", line 235, in _compile cachekey = (type(key[0]),) + key RuntimeError: maximum recursion depth exceeded while calling a Python object A filter like "(dnsAlias=)" caused the following Traceback in UMC: Traceback (most recent call last): File "%PY2.7%/notifier/threads.py", line 82, in _run tmp = self._function() File "%PY2.7%/notifier/__init__.py", line 104, in __call__ return self._function( *tmp, **self._kwargs ) File "%PY2.7%/univention/management/console/modules/udm/__init__.py", line 563, in _thread result = module.search(container, objectProperty, objectPropertyValue, superordinate, scope=scope, hidden=hidden) File "%PY2.7%/univention/management/console/modules/udm/udm_ldap.py", line 84, in _decorated return method(*args, **kwargs) File "%PY2.7%/univention/management/console/ldap.py", line 143, in _decorated result = func(*args, **kwargs) File "%PY2.7%/univention/management/console/modules/udm/udm_ldap.py", line 484, in search result = self.module.lookup(None, ldap_connection, filter_s, base=container, superordinate=superordinate, scope=scope, sizelimit=sizelimit) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 682, in lookup filter = lookup_filter(filter_s, lo) File "%PY2.7%/univention/admin/handlers/computers/domaincontroller_master.py", line 663, in lookup_filter filter_s = univention.admin.handlers.dns.alias.lookup_alias_filter(lo, filter_s) File "%PY2.7%/univention/admin/handlers/dns/alias.py", line 184, in lookup_alias_filter for dn, attrs in lo.search(base=alias_base, scope='sub', filter=alias_filter_s, attr=['cNAMERecord']): File "%PY2.7%/univention/admin/uldap.py", line 433, in search raise univention.admin.uexceptions.ldapError('%s: %s' % (_err2str(msg), filter)) ldapError: Bad search filter: (&(objectClass=dNSZone)(!(relativeDomainName=@))(!(zoneName=*.in-addr.arpa))(CNAMERecord=*)(relativeDomainName=*)))
Reproduce: curl 'http://Administrator:univention@10.200.27.20/univention/command/udm/query' -H 'Content-Type: application/json' --data-binary '{"options":{"container":"all","hidden":false,"objectType":"computers/domaincontroller_master","objectProperty":"dnsAlias","objectPropertyValue":"*","fields":["name","description","labelObjectType","path"]},"flavor":"computers/computer"}' --compressed | python -m json.tool
Search filters for every computer module has been repaired. dnsAlias=foo dnsAlias=foo,bar dnsAlias=* univention-directory-manager-modules (14.0.12-22) c731a44f110c | Bug #31494: fix filtering for dnsAlias=foo univention-directory-manager-modules.yaml d095962ccced | YAML Bug #31494
searching for dns aliases works for all computer modules: OK installation: OK yaml: OK
One test case failed (60_umc/70_udm_network_functionality) and revealed a exception if instead of a string a univention.admin.filter.expression() is given to the function. this has been fixed: univention-directory-manager-modules (14.0.12-24) d375938de7d8 | Bug #31494: fix replacing of filter if it's not a string
<http://errata.software-univention.de/ucs/4.4/50.html>