Bug 52566 - udm/put (users/user): TypeError: unhashable type: 'list'
udm/put (users/user): TypeError: unhashable type: 'list'
Status: NEW
Product: UCS
Classification: Unclassified
Component: UDM (Generic)
UCS 4.4
Other Linux
: P5 normal (vote)
: ---
Assigned To: UMC maintainers
UMC maintainers
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2021-01-08 13:37 CET by Christian Castens
Modified: 2021-11-19 12:51 CET (History)
3 users (show)

See Also:
What kind of report is it?: Bug Report
What type of bug is this?: 4: Minor Usability: Impairs usability in secondary scenarios
Who will be affected by this bug?: 1: Will affect a very few installed domains
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?: Yes
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number: 2020121121000808, 2021012521000551, 2021070221000441, 2021082021000271
Bug group (optional): Error handling, External feedback
Max CVSS v3 score:


Attachments
reproduce joinscript (4.63 KB, application/x-shellscript)
2021-03-03 01:00 CET, Florian Best
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Castens univentionstaff 2021-01-08 13:37:02 CET
Version: 4.4-7 errata835 (Blumenthal)

Remark: kk

Error:
Internal server error during "udm/put (users/user)".
Request: udm/put (users/user)

  File "%PY2.7%/notifier/threads.py", line 80, in _run
    result = 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 440, in _thread
    module.modify(properties)
  File "%PY2.7%/univention/management/console/modules/udm/udm_ldap.py", line 645, in modify
    obj.modify()
  File "%PY2.7%/univention/admin/handlers/users/user.py", line 1410, in modify
    return super(object, self).modify(*args, **kwargs)
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 650, in modify
    dn = self._modify(modify_childs, ignore_license=ignore_license, response=response)
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 1326, in _modify
    ml = self._ldap_object_classes(ml)
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 1439, in _ldap_object_classes
    newattr = ldap.cidict.cidict(_MergedAttributes(self, ml).get_attributes())
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 3612, in get_attributes
    return dict((attr, self.get_attribute(attr)) for attr in attributes)
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 3612, in <genexpr>
    return dict((attr, self.get_attribute(attr)) for attr in attributes)
  File "%PY2.7%/univention/admin/handlers/__init__.py", line 3623, in get_attribute
    values |= set(new)
TypeError: unhashable type: 'list'

Role: domaincontroller_master
Comment 1 Riya Bhattacharjee univentionstaff 2021-02-16 13:15:26 CET
UCS Version: 4.4-7 errata873 (Blumenthal)

Interner Server-Fehler in "udm/put (users/user)".
Request: udm/put (users/user)

 

  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 440, in _thread

    module.modify(properties)

  File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/udm_ldap.py", line 645, in modify

    obj.modify()

  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/users/user.py", line 1410, in modify

    return super(object, self).modify(*args, **kwargs)

  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 650, in modify

    dn = self._modify(modify_childs, ignore_license=ignore_license, response=response)

  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1330, in _modify

    self.dn = self.lo.modify(self.dn, ml, ignore_license=ignore_license, serverctrls=serverctrls, response=response)

  File "/usr/lib/python2.7/dist-packages/univention/admin/uldap.py", line 891, in modify

    return self.lo.modify(dn, changes, serverctrls=serverctrls, response=response)

  File "/usr/lib/python2.7/dist-packages/univention/uldap.py", line 207, in _decorated

    return func(self, *args, **kwargs)

  File "/usr/lib/python2.7/dist-packages/univention/uldap.py", line 756, in modify

    self.modify_ext_s(dn, ml, serverctrls=serverctrls, response=response)

  File "/usr/lib/python2.7/dist-packages/univention/uldap.py", line 207, in _decorated

    return func(self, *args, **kwargs)

 File "/usr/lib/python2.7/dist-packages/univention/uldap.py", line 813, in modify_ext_s

    rtype, rdata, rmsgid, resp_ctrls = self.lo.modify_ext_s(dn, ml, serverctrls=serverctrls)

  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 987, in modify_ext_s

    return self._apply_method_s(SimpleLDAPObject.modify_ext_s,*args,**kwargs)

  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 931, in _apply_method_s

    return func(self,*args,**kwargs)

  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 373, in modify_ext_s

    msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)

  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 370, in modify_ext

    return self._ldap_call(self._l.modify_ext,dn,modlist,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))

  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 106, in _ldap_call

    result = func(*args,**kwargs)

TypeError: ('expected a string in the list', ['fos2', ''])

Interner Server-Fehler in "udm/put (users/user)".
Comment 2 Florian Best univentionstaff 2021-03-03 01:00:59 CET
Created attachment 10630 [details]
reproduce joinscript

One example way to reproduce this is a (broken) extended attribute with complex syntax:

udm users/user modify --dn uid=test,cn=users,dc=base --set borgbackup-user-sshkey-fullaccess='"ssh-xxx" "foo"'

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/univention/admincli/admin.py", line 1127, in <module>
    print('\n'.join(doit(sys.argv)))                           
  File "/usr/lib/python2.7/dist-packages/univention/admincli/admin.py", line 409, in doit
    out = _doit(arglist)                                                                              
  File "/usr/lib/python2.7/dist-packages/univention/admincli/admin.py", line 908, in _doit            
    dn = object.modify()                                      
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/users/user.py", line 1410, in modify
    return super(object, self).modify(*args, **kwargs)             
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 650, in modify
    dn = self._modify(modify_childs, ignore_license=ignore_license, response=response)
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1326, in _modify
    ml = self._ldap_object_classes(ml)     
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1439, in _ldap_object_classes
    newattr = ldap.cidict.cidict(_MergedAttributes(self, ml).get_attributes())
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3612, in get_attributes
    return dict((attr, self.get_attribute(attr)) for attr in attributes)                                    
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3612, in <genexpr>
    return dict((attr, self.get_attribute(attr)) for attr in attributes)
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3623, in get_attribute
    values |= set(new)                                                                   
TypeError: unhashable type: 'list'

→ ml is:
[('borgbackupSSHKeyFullAccess', '', [['ssh-xxx', 'foo']]), ('objectClass', ['krb5KDCEntry', 'organizationalPerson', 'automount', 'top', 'inetOrgPerson'
, 'sambaSamAccount', 'person', 'univentionPWHistory', 'shadowAccount', 'univentionObject', 'univentionMail', 'krb5Principal', 'posixAccount'], ['krb5KDCEntry', 'person', 'automount', 'top', 'borgbackupUser', 'inetOrgPerson', 'sambaSamAccount', 'organizationalPerson', 'univentionPWHistory', 'shadowAccount', 'univentionObject', 'univentionMail', 'krb5Principal', 'posixAccount'])]
Comment 3 Christina Scheinig univentionstaff 2021-07-06 12:40:20 CEST
A customer gets this traceback, when trying to set AD Connection via UMC.
Office365 connector is installed on a Backup server. The UMC of the Master is used for the adjustment.

-----------------------------
Interner Server-Fehler in "udm/put (users/user)".
Request: udm/put (users/user)

   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 440, in _thread 
     module.modify(properties)
   File "/usr/lib/python2.7/dist-packages/univention/management/console/modules/udm/udm_ldap.py", line 645, in modify
     obj.modify() 
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/users/user.py", line 1410, in modify
     return super(object, self).modify(*args, **kwargs)
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 650, in modify
     dn = self._modify(modify_childs, ignore_license=ignore_license, response=response)
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1326, in _modify
     ml = self._ldap_object_classes(ml) 
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1439, in _ldap_object_classes
     newattr = ldap.cidict.cidict(_MergedAttributes(self, ml).get_attributes())
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3612, in get_attributes
     return dict((attr, self.get_attribute(attr)) for attr in attributes)
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3612, in <genexpr>
     return dict((attr, self.get_attribute(attr)) for attr in attributes)
   File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 3623, in get_attribute
     values |= set(new)
TypeError: unhashable type: 'list'
--------------------

Setting the attribute via udm it works fine:
udm users/user modify
--dn="uid=sun.devschueler,cn=schueler,cn=users,ou=SUN,dc=schein,dc=schule" --set
UniventionOffice365ADConnectionAlias=sunADconnection
udm users/user modify
--dn="uid=sun.devschueler,cn=schueler,cn=users,ou=SUN,dc=schein,dc=schule" --set
UniventionOffice365Enabled=1

univention-app info:

Backup:
-------------
Installed: office365=3.4 prometheus-node-exporter=1.1 ucsschool=4.4 v9

Master:
-------------
UCS: 4.4-8 errata974
Installed: prometheus-node-exporter=1.1 ucsschool=4.4 v9
ucsschool-veyon-proxy=1.1

How can I investigate?
Comment 4 Christina Scheinig univentionstaff 2021-07-07 09:06:01 CEST
New discovery, if the customer uses the UMC of the backup server, he does not get an traceback. 
I think this should be a new bug?
Comment 5 Christina Scheinig univentionstaff 2021-07-07 09:15:56 CEST
I filed Bug 53551 for office365 scenario