Univention Bugzilla – Bug 52136
permission error in upload directory leads to HTTP 500, but problem/traceback is not logged
Last modified: 2020-09-25 12:46:50 CEST
When using the HTTP-API for UCS@school imports and the upload directory '/var/spool/ucs-school-import/media/uploads/' is not writable for the gunicorn process (running as user uas-import:uas-import), in the regular log level no helpful error message is logged. When raising the log level to DEBUG, the following traceback is produced: ------------------------------------------------------------------------------- ==> /var/log/univention/ucs-school-import/gunicorn_error.log <== Internal Server Error: /api/v1/imports/users/ Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/django/core/handlers/exception.py", line 42, in inner response = get_response(request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 249, in _legacy_get_response response = self._get_response(request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/rest_framework/viewsets.py", line 87, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/rest_framework/views.py", line 466, in dispatch response = self.handle_exception(exc) File "/usr/lib/python2.7/dist-packages/rest_framework/views.py", line 463, in dispatch response = handler(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/rest_framework/mixins.py", line 21, in create self.perform_create(serializer) File "/usr/lib/pymodules/python2.7/ucsschool/http_api/import_api/views.py", line 313, in perform_create serializer.save(principal=self.request.user) File "/usr/lib/python2.7/dist-packages/rest_framework/serializers.py", line 191, in save self.instance = self.create(validated_data) File "/usr/lib/pymodules/python2.7/ucsschool/http_api/import_api/serializers.py", line 212, in create instance = super(UserImportJobSerializer, self).create(validated_data) File "/usr/lib/python2.7/dist-packages/rest_framework/serializers.py", line 872, in create instance = ModelClass.objects.create(**validated_data) File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 399, in create obj.save(force_insert=True, using=self.db) File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 796, in save force_update=force_update, update_fields=update_fields) File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 824, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 908, in _save_table result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "/usr/lib/python2.7/dist-packages/django/db/models/base.py", line 947, in _do_insert using=using, raw=raw) File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 1045, in _insert return query.get_compiler(using=using).execute_sql(return_id) File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1053, in execute_sql for sql, params in self.as_sql(): File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1006, in as_sql for obj in self.query.objs File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 955, in pre_save_val return field.pre_save(obj, add=True) File "/usr/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 292, in pre_save file.save(file.name, file, save=False) File "/usr/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 91, in save self.name = self.storage.save(name, content, max_length=self.field.max_length) File "/usr/lib/python2.7/dist-packages/django/core/files/storage.py", line 54, in save return self._save(name, content) File "/usr/lib/python2.7/dist-packages/django/core/files/storage.py", line 317, in _save os.makedirs(directory, self.directory_permissions_mode) File "/usr/lib/python2.7/os.py", line 157, in makedirs mkdir(name, mode) OSError: [Errno 13] Permission denied: '/var/spool/ucs-school-import/media/uploads/2020-09-25' ------------------------------------------------------------------------------- Either make Django log its errors to the log file or enclose the relevant object creation code in a try-except block that logs the error.
added customer ticket