django-DefectDojo icon indicating copy to clipboard operation
django-DefectDojo copied to clipboard

Can't delete group

Open tsukiazuma opened this issue 2 years ago • 9 comments

Bug description Can't delete group

Steps to reproduce Steps to reproduce the behavior:

  1. Create new group
  2. Add member
  3. Delete group -> Error image

Deployment method (select with an X)

  • [X] Docker Compose

Environment information

  • Operating System: Red Hat Enterprise Linux version 8.5 (Ootpa)
  • DefectDojo version: v2.29.1 Logs
django-defectdojo-master-uwsgi-1  | [11/Jan/2024 08:13:58] INFO [django.request:241] OK: /group/2/delete
django-defectdojo-master-uwsgi-1  | Traceback (most recent call last):
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
django-defectdojo-master-uwsgi-1  |     return self.cursor.execute(sql, params)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  | psycopg2.errors.UndefinedColumn: column dojo_system_settings.enable_auditlog does not exist
django-defectdojo-master-uwsgi-1  | LINE 1: SELECT "dojo_system_settings"."id", "dojo_system_settings"."...
django-defectdojo-master-uwsgi-1  |                                             ^
django-defectdojo-master-uwsgi-1  |
django-defectdojo-master-uwsgi-1  |
django-defectdojo-master-uwsgi-1  | The above exception was the direct cause of the following exception:
django-defectdojo-master-uwsgi-1  |
django-defectdojo-master-uwsgi-1  | Traceback (most recent call last):
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 56, in inner
django-defectdojo-master-uwsgi-1  |     response = get_response(request)
django-defectdojo-master-uwsgi-1  |                ^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
django-defectdojo-master-uwsgi-1  |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
django-defectdojo-master-uwsgi-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/views/generic/base.py", line 103, in view
django-defectdojo-master-uwsgi-1  |     return self.dispatch(request, *args, **kwargs)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/views/generic/base.py", line 142, in dispatch
django-defectdojo-master-uwsgi-1  |     return handler(request, *args, **kwargs)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/app/dojo/group/views.py", line 265, in get
django-defectdojo-master-uwsgi-1  |     context = self.get_initial_context(request, group)
django-defectdojo-master-uwsgi-1  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/app/dojo/group/views.py", line 227, in get_initial_context
django-defectdojo-master-uwsgi-1  |     collector.collect([group])
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/contrib/admin/utils.py", line 186, in collect
django-defectdojo-master-uwsgi-1  |     return super().collect(objs, source_attr=source_attr, **kwargs)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/models/deletion.py", line 343, in collect
django-defectdojo-master-uwsgi-1  |     if sub_objs:
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 408, in __bool__
django-defectdojo-master-uwsgi-1  |     self._fetch_all()
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 1867, in _fetch_all
django-defectdojo-master-uwsgi-1  |     self._result_cache = list(self._iterable_class(self))
django-defectdojo-master-uwsgi-1  |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 87, in __iter__
django-defectdojo-master-uwsgi-1  |     results = compiler.execute_sql(
django-defectdojo-master-uwsgi-1  |               ^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1398, in execute_sql
django-defectdojo-master-uwsgi-1  |     cursor.execute(sql, params)
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute
django-defectdojo-master-uwsgi-1  |     return self._execute_with_wrappers(
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
django-defectdojo-master-uwsgi-1  |     return executor(sql, params, many, context)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute
django-defectdojo-master-uwsgi-1  |     with self.db.wrap_database_errors:
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
django-defectdojo-master-uwsgi-1  |     raise dj_exc_value.with_traceback(traceback) from exc_value
django-defectdojo-master-uwsgi-1  |   File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute
django-defectdojo-master-uwsgi-1  |     return self.cursor.execute(sql, params)
django-defectdojo-master-uwsgi-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django-defectdojo-master-uwsgi-1  | django.db.utils.ProgrammingError: column dojo_system_settings.enable_auditlog does not exist
django-defectdojo-master-uwsgi-1  | LINE 1: SELECT "dojo_system_settings"."id", "dojo_system_settings"."...
django-defectdojo-master-uwsgi-1  |                                             ^
django-defectdojo-master-uwsgi-1  |

tsukiazuma avatar Jan 11 '24 08:01 tsukiazuma

Hmmm... this is interesting. Your issue is not connected only to the management of group but to different components (the mentioned error is just a side-effect). Based on the logs I see that enable_auditlog is missing. This field has been removed in #9002, released in v2.30.0 It looks like you somehow ran initializer in version 2.30.0 (or 2.30.1) but uwsgi in 2.29.1. Quite an unusual situation. Usually, if there is some issue, versions are opposite (new uwsgi, old initializer).

A couple of investigation questions:

  • Did you set DJANGO_VERSION? If so how?
  • Did you run git pull (on another git command)?
  • Did you run ./dc-build.sh recently?
  • Did you perform any changes in to the code?

kiblik avatar Jan 11 '24 09:01 kiblik

Oh, before I tried to upgrate version to v2.30.0 with https://defectdojo.github.io/django-DefectDojo/getting_started/upgrading/ But when success update v2.30.0, I can't authen LDAP - can see it here: https://github.com/DefectDojo/django-DefectDojo/issues/9272 So I remove 2 image: defectdojo/defectdojo-django:latest, defectdojo/defectdojo-nginx:latest. Then run: ./dc-build.sh and ./dc-up-d.sh postgres-redis to use old version: v2.29.1

tsukiazuma avatar Jan 12 '24 04:01 tsukiazuma

A downgrade from 2.30.0 to 2.29.1 would be possible but it is necessary to perform the migration manually.

python manage.py migrate dojo 0193_remove_system_settings_enable_auditlog

kiblik avatar Jan 30 '24 19:01 kiblik

I move to folder DefectDojo and run command, but get error: Traceback (most recent call last): File "/opt/django-DefectDojo-master/manage.py", line 9, in from django.core.management import execute_from_command_line ModuleNotFoundError: No module named 'django'

Can you tell me step to step to run it?

tsukiazuma avatar Jan 31 '24 01:01 tsukiazuma

docker exec -it django-defectdojo-uwsgi-1 python manage.py migrate dojo 0193_remove_system_settings_enable_auditlog

kiblik avatar Jan 31 '24 10:01 kiblik

I can only run command docker exec -it django-defectdojo-master-uwsgi-1 python manage.py migrate dojo 0193_remove_system_settings_enable_auditlog on newest version, after downgrade version on web UI is still newest version If run on version v2.29.1, get error:

/usr/local/lib/python3.11/site-packages/coreapi/codecs/download.py:5: DeprecationWarning: 'cgi' is deprecated and slated for removal in Python 3.13
  import cgi
CommandError: Cannot find a migration matching '0193_remove_system_settings_enable_auditlog' from app 'dojo'.

But when upgrade on new version, LDAP connect is fail

tsukiazuma avatar Feb 01 '24 01:02 tsukiazuma

In my opinion, the best option would be to drop LDAP and move to sth more modern. To not be stacked with the old version of DD.

If it is not an option, can you try following?

  • upgrade to 2.30.0
  • let finish the initializer (until it is successfully done)
  • run downgrade of database (docker exec -it django-defectdojo-master-uwsgi-1 python manage.py migrate dojo 0193_remove_system_settings_enable_auditlog). Yes, on 2.30.0
  • stop the instance
  • downgrade to 2.29.x (there is not that huge difference between these versions)
  • start an instance on 2.30.0 and hope, it will work

kiblik avatar Feb 01 '24 12:02 kiblik

My goal is to be able to continue using LDAP on the new version. And I don't clear at:

  • downgrade to 2.29.x (there is not that huge difference between these versions)
  • start an instance on 2.30.0 and hope, it will work Please, give more detail information

tsukiazuma avatar Feb 02 '24 01:02 tsukiazuma

Do you still have this issue or can we close it @tsukiazuma ?

manuel-sommer avatar May 09 '24 11:05 manuel-sommer