[GH-ISSUE #3436] LDAP-User cannot be set to more than SimpleUsers #1847

Closed
opened 2026-02-27 11:19:28 +03:00 by kerem · 0 comments
Owner

Originally created by @sr-it1 on GitHub (Jan 29, 2025).
Original GitHub issue: https://github.com/modoboa/modoboa/issues/3436

Impacted versions

  • OS Type: Ubuntu
  • OS Version: 22.04
  • Database Type: MySQL
  • Database version: 10.6
  • Modoboa: 2.3.4
  • installer used: Yes
  • Webserver: Nginx

Steps to reproduce

I just installed a new server with the installer and set up external LDAP
authentication for Modoboa and Dovecot. This works well - the LDAP-user
can login and the maildir /srv/vmail/domain/user gets created.

Current behavior

  1. As a SuperAdmin I'd like to change the role of a LDAP user and this
    cannot be done. I'm getting an "Internal error". The corresponding
    request to /admin/accounts//edit/ gets an HTTP 500 response.

  2. The membership to the defined LDAP group for these accounts, which is
    set in Modoboa -> Parameters -> LDAP settings -> Administrator groups
    seems not to be applied.

Traceback for 1.

`Environment:

Request Method: GET
Request URL: https:///admin/accounts//edit/?active_tab=default

Django Version: 4.2.18
Python Version: 3.10.12
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'django.contrib.staticfiles',
'reversion',
'ckeditor',
'ckeditor_uploader',
'oauth2_provider',
'corsheaders',
'rest_framework',
'rest_framework.authtoken',
'drf_spectacular',
'phonenumber_field',
'django_otp',
'django_otp.plugins.otp_totp',
'django_otp.plugins.otp_static',
'django_rename_app',
'django_rq',
'modoboa',
'modoboa.core',
'modoboa.lib',
'modoboa.admin',
'modoboa.transport',
'modoboa.relaydomains',
'modoboa.limits',
'modoboa.parameters',
'modoboa.dnstools',
'modoboa.policyd',
'modoboa.maillog',
'modoboa.pdfcredentials',
'modoboa.dmarc',
'modoboa.imap_migration',
'modoboa.postfix_autoreply',
'modoboa.sievefilters',
'modoboa.ldapsync',
'modoboa_amavis',
'modoboa_webmail',
'modoboa_contacts',
'modoboa_radicale',
'webpack_loader')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'x_forwarded_for.middleware.XForwardedForMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'modoboa.core.middleware.LocalConfigMiddleware',
'modoboa.lib.middleware.AjaxLoginRedirect',
'modoboa.lib.middleware.CommonExceptionCatcher',
'modoboa.lib.middleware.RequestCatcherMiddleware')

Traceback (most recent call last):
File "/srv/modoboa/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3.10/contextlib.py", line 79, in inner
return func(*args, **kwds)
File "/usr/lib/python3.10/contextlib.py", line 79, in inner
return func(*args, **kwds)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
return view_func(request, *args, **kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
return view_func(request, *args, **kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/views/decorators/http.py", line 43, in inner
return func(request, *args, **kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/reversion/revisions.py", line 325, in do_revision_context
return func(*args, **kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/admin/views/identity.py", line 179, in editaccount
return AccountForm(request, instances=instances).process()
File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/form_utils.py", line 364, in process
return render(self.request, self.template_name, context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/defaulttags.py", line 321, in render
return nodelist.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/library.py", line 237, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/templatetags/form_tags.py", line 19, in render_form
return render_to_string(tpl, {"form": form})
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/library.py", line 237, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/templatetags/form_tags.py", line 44, in render_field
if isinstance(field.field, SeparatorField):

Exception Type: AttributeError at /admin/accounts//edit/
Exception Value: 'str' object has no attribute 'field'
`

Expected behavior

User can be modified for more rights within the frontend of Modoboa.

Originally created by @sr-it1 on GitHub (Jan 29, 2025). Original GitHub issue: https://github.com/modoboa/modoboa/issues/3436 # Impacted versions * OS Type: Ubuntu * OS Version: 22.04 * Database Type: MySQL * Database version: 10.6 * Modoboa: 2.3.4 * installer used: Yes * Webserver: Nginx # Steps to reproduce I just installed a new server with the installer and set up external LDAP authentication for Modoboa and Dovecot. This works well - the LDAP-user can login and the maildir /srv/vmail/domain/user gets created. # Current behavior 1. As a SuperAdmin I'd like to change the role of a LDAP user and this cannot be done. I'm getting an "Internal error". The corresponding request to /admin/accounts/<id>/edit/ gets an HTTP 500 response. 2. The membership to the defined LDAP group for these accounts, which is set in Modoboa -> Parameters -> LDAP settings -> Administrator groups seems not to be applied. Traceback for 1. `Environment: Request Method: GET Request URL: https://<host>/admin/accounts/<id>/edit/?active_tab=default Django Version: 4.2.18 Python Version: 3.10.12 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.sites', 'django.contrib.staticfiles', 'reversion', 'ckeditor', 'ckeditor_uploader', 'oauth2_provider', 'corsheaders', 'rest_framework', 'rest_framework.authtoken', 'drf_spectacular', 'phonenumber_field', 'django_otp', 'django_otp.plugins.otp_totp', 'django_otp.plugins.otp_static', 'django_rename_app', 'django_rq', 'modoboa', 'modoboa.core', 'modoboa.lib', 'modoboa.admin', 'modoboa.transport', 'modoboa.relaydomains', 'modoboa.limits', 'modoboa.parameters', 'modoboa.dnstools', 'modoboa.policyd', 'modoboa.maillog', 'modoboa.pdfcredentials', 'modoboa.dmarc', 'modoboa.imap_migration', 'modoboa.postfix_autoreply', 'modoboa.sievefilters', 'modoboa.ldapsync', 'modoboa_amavis', 'modoboa_webmail', 'modoboa_contacts', 'modoboa_radicale', 'webpack_loader') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'x_forwarded_for.middleware.XForwardedForMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'modoboa.core.middleware.LocalConfigMiddleware', 'modoboa.lib.middleware.AjaxLoginRedirect', 'modoboa.lib.middleware.CommonExceptionCatcher', 'modoboa.lib.middleware.RequestCatcherMiddleware') Traceback (most recent call last): File "/srv/modoboa/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/srv/modoboa/env/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3.10/contextlib.py", line 79, in inner return func(*args, **kwds) File "/usr/lib/python3.10/contextlib.py", line 79, in inner return func(*args, **kwds) File "/srv/modoboa/env/lib/python3.10/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view return view_func(request, *args, **kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view return view_func(request, *args, **kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/django/views/decorators/http.py", line 43, in inner return func(request, *args, **kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/reversion/revisions.py", line 325, in do_revision_context return func(*args, **kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/admin/views/identity.py", line 179, in editaccount return AccountForm(request, instances=instances).process() File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/form_utils.py", line 364, in process return render(self.request, self.template_name, context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render content = loader.render_to_string(template_name, context, request, using=using) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 175, in render return self._render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render return self.nodelist.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render return compiled_parent._render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render return self.nodelist.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render nodelist.append(node.render_annotated(context)) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/defaulttags.py", line 321, in render return nodelist.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/library.py", line 237, in render output = self.func(*resolved_args, **resolved_kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/templatetags/form_tags.py", line 19, in render_form return render_to_string(tpl, {"form": form}) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 175, in render return self._render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 167, in _render return self.nodelist.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/srv/modoboa/env/lib/python3.10/site-packages/django/template/library.py", line 237, in render output = self.func(*resolved_args, **resolved_kwargs) File "/srv/modoboa/env/lib/python3.10/site-packages/modoboa/lib/templatetags/form_tags.py", line 44, in render_field if isinstance(field.field, SeparatorField): Exception Type: AttributeError at /admin/accounts/<id>/edit/ Exception Value: 'str' object has no attribute 'field' ` # Expected behavior User can be modified for more rights within the frontend of Modoboa.
kerem 2026-02-27 11:19:28 +03:00
  • closed this issue
  • added the
    bug
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/modoboa-modoboa#1847
No description provided.