Topic: sync_profiles_to_db throws TypeError if Mailinglist has no owner
==== REQUIRED BASIC INFO OF YOUR IREDMAIL SERVER ====
- iRedMail version (check /etc/iredmail-release): 1.4.1
- Deployed with iRedMail Easy or the downloadable installer?: downloadable installer
- Linux/BSD distribution name and version: Ubuntu 20.04.3
- Store mail accounts in which backend (LDAP/MySQL/PGSQL): LDAP
- Web server (Apache or Nginx): Nginx
- Manage mail accounts with iRedAdmin-Pro? Yes
- [IMPORTANT] Related original log or error message is required if you're experiencing an issue.
====
Hello,
I tried to update mlmmjadmin from version 3.1 to 3.1.2 and got the following error message on one of the last steps:
* mlmmjadmin has been successfully upgraded.
* Restarting service: mlmmjadmin.
* Sync mailing list profiles to SQL/LDAP.
Traceback (most recent call last):
 File "tools/sync_profiles_to_db.py", line 251, in <module>
   qr = sync_owners(mail, owners)
 File "tools/sync_profiles_to_db.py", line 232, in sync_owners
   return __sync_addresses(mail=mail,
 File "tools/sync_profiles_to_db.py", line 210, in __sync_addresses
   mod_attr = [(ldap.MOD_REPLACE, "listOwner", str2bytes(addresses))]
 File "/opt/mlmmjadmin-3.1.2/tools/../libs/utils.py", line 39, in str2bytes
   s = __str2bytes(s)
 File "/opt/mlmmjadmin-3.1.2/tools/../libs/utils.py", line 22, in __str2bytes
   return bytes(s)
TypeError: cannot convert 'NoneType' object to bytes
* Upgrading completed.After some digging around I found the problem:
201     elif backend == "ldap":
202         _domain = mail.split("@", 1)[-1]
203         ldn = "mail={},ou=Groups,domainName={},{}".format(mail, _domain, settings.iredmail_ldap_basedn)
204 
205         print(f"_domain -> %{_domain}")
206         print(f"ldn -> %{ldn}")
207 
208         if not addresses:
209             # Remove attribute.
210             addresses = None
211 
212         if address_type == "owner":
213             print("owner")
214             print(f"addresses -> %{addresses}")
215             mod_attr = [(ldap.MOD_REPLACE, "listOwner", str2bytes(addresses))]
216             print(f"mod_attr -> %{mod_attr}")
217         elif address_type == "moderator":
218             print("moderator")
219             print(f"addresses -> %{addresses}")
220             mod_attr = [(ldap.MOD_REPLACE, "listModerator", str2bytes(addresses))]
221             print(f"mod_attr -> %{mod_attr}")
222 
223         try:
224             conn.modify_s(ldn, mod_attr)
225         except ldap.OBJECT_CLASS_VIOLATION:
226             print("<<< ERROR >>> Seems your OpenLDAP server doesn't support "
227                   "`listOwner` and `listModerator` attributes which were "
228                   "introduced in iRedMail-1.4.0, please follow iRedMail "
229                   "upgrade tutorial to update LDAP schema file "
230                   "`iredmail.schema` first: "
231                   "https://docs.iredmail.org/iredmail.releases.html")
232             sys.exit()
233         except Exception as e:
234             msg = "Error while updating {} of mailing list {}: {}".format(address_type, mail, repr(e))
235             return (False, msg)
236 
237     return (True, )Output from the modified code:
_domain -> %customername.tld
ldn -> %mail=listname@customername.tld,ou=Groups,domainName=customername.tld,o=domains,dc=mx,dc=companyname,dc=tld
owner
addresses -> %None
Traceback (most recent call last):
  File "./sync_profiles_to_db.py", line 260, in <module>
    qr = sync_owners(mail, owners)
  File "./sync_profiles_to_db.py", line 241, in sync_owners
    return __sync_addresses(mail=mail,
  File "./sync_profiles_to_db.py", line 215, in __sync_addresses
    mod_attr = [(ldap.MOD_REPLACE, "listOwner", str2bytes(addresses))]
  File "/opt/mlmmjadmin-3.1.2/tools/../libs/utils.py", line 39, in str2bytes
    s = __str2bytes(s)
  File "/opt/mlmmjadmin-3.1.2/tools/../libs/utils.py", line 22, in __str2bytes
    return bytes(s)
TypeError: cannot convert 'NoneType' object to bytesI checked the UI and it is true, that the list currently does not have an owner.
----
Spider Email Archiver: On-Premises, lightweight email archiving software developed by iRedMail team. Supports Amazon S3 compatible storage and custom branding.