Univention Bugzilla – Bug 45116
uccsetup/info: fails with IndexError: list index out of range
Last modified: 2017-08-02 14:34:13 CEST
Bug #37171 causes that when doing a lookup(required=True, unique=True)[0] a IndexError instead of a noObject exception is raised. Regressing behavior since Bug #30368. Remark: - Server neu installiert - Lizenz installiert - UCC installiert -> Fehler :( Version: 4.2-1 errata118 (Lesum) Die Ausführung des Kommandos uccsetup/info ist fehlgeschlagen: Traceback (most recent call last): File "%PY2.7%/univention/management/console/base.py", line 249, in execute function.__func__(self, request, *args, **kwargs) File "%PY2.7%/univention/management/console/modules/decorators.py", line 318, in _response result = _multi_response(self, request) File "%PY2.7%/univention/management/console/modules/decorators.py", line 192, in _response return function(self, request) File "%PY2.7%/univention/management/console/modules/decorators.py", line 440, in _response return list(function(self, iterator, *nones)) File "%PY2.7%/univention/management/console/modules/decorators.py", line 286, in _fake_func yield function(self, *args) File "%PY2.7%/univention/management/console/modules/uccsetup/__init__.py", line 86, in info ucr_policy.update(util.get_ucr_policy_variables(ldap_connection)) # hack to access the method is_true() File "%PY2.7%/univention/management/console/modules/uccsetup/util.py", line 330, in get_ucr_policy_variables with _open_container_policy(container_dn, 'policies/registry', policy_dn, ldap_connection, read_only=True) as ucr_policy: File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__ return self.gen.next() File "%PY2.7%/univention/management/console/modules/uccsetup/util.py", line 276, in _open_container_policy policy_obj = udm_objects.get(udm_modules.get(policy_type), None, ldap_connection, None, policy_dn) File "%PY2.7%/univention/admin/objects.py", line 84, in get obj = univention.admin.modules.lookup(module.module, co, lo, base=dn, superordinate=superordinate, scope='base', unique=True, required=True)[0] IndexError: list index out of range
>>> import univention.admin >>> lo,po=univention.admin.uldap.getMachineConnection() >>> univention.admin.modules.update() E.g. expected behavior for a user: >>> u = univention.admin.modules.get('users/user') >>> u.lookup(None, lo, '', base='cn=DOESNOTEXISTS,dc=school,dc=local', required=True)[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/pymodules/python2.7/univention/admin/handlers/users/user.py", line 2846, in lookup for dn, attrs in lo.search(unicode(filter), base, scope, [], unique, required, timeout, sizelimit): File "/usr/lib/pymodules/python2.7/univention/admin/uldap.py", line 425, in search raise univention.admin.uexceptions.noObject(_err2str(msg)) univention.admin.uexceptions.noObject: No such object Broken behavior for policies: >>> p = univention.admin.modules.get('policies/registry') >>> p.lookup(None, lo, '', base='cn=DOESNOTEXISTS,dc=school,dc=local', required=True)[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
Fixed by catching ImportError: univention-directory-manager-modules (12.0.18-8): r81653 | Bug #45116: fix regression in univention.admin.objects.get() univention-directory-manager-modules.yaml: r81655 | YAML Bug #45116 QA: The following script should raise noObject instead of IndexError: import univention.admin lo,po=univention.admin.uldap.getMachineConnection() univention.admin.modules.update() p = univention.admin.modules.get('policies/registry') print univention.admin.objects.get(p, None, lo, po, 'cn=foo,dc=school,dc=local')
OK univention.admin.objects.get fails with noObject error instead of IndexError if policies/registry object does not exist YAML: OK -> verified
<http://errata.software-univention.de/ucs/4.2/121.html>