• Bug#1101299: hyperkitty: Django crash for some locales (like nn_NO)

    From Petter Reinholdtsen@21:1/5 to All on Tue Mar 25 12:10:01 2025
    Package: python3-django-hyperkitty
    Version: 1.3.7-1
    Severity: important

    When visiting a mailman list archive with a broken locale, the django application get an internal error as reported below. I believe the
    issue is incorrect "Plural-Forms" header in .po files, which was fixed
    upstream 2023-10-11 in
    <URL: https://gitlab.com/mailman/hyperkitty/-/commit/efa103d1c9a8e892bc852dee167414d463d288c1 >.

    Please update the Debian package in stable to fix this issue.

    -------------------- Start of forwarded message --------------------
    Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error:
    /lister3/postorius/lists/
    From: root@nuug.no
    To: drift@nuug.no
    Date: Tue, 25 Mar 2025 09:59:25 -0000

    Internal Server Error: /lister3/postorius/lists/

    ValueError at /postorius/lists/
    invalid token in plural form: EXPRESSION

    Request Method: GET
    Request URL: https://lists.nuug.no/lister3/postorius/lists/
    Django Version: 3.2.19
    Python Executable: /usr/bin/uwsgi-core
    Python Version: 3.11.2
    Python Path: ['.', '', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/dist-packages', '/usr/local/lib/python3.11/dist-packages/youtube_upload-0.8.0-py3.11.egg', '/usr/lib/python3/dist-
    packages', '/usr/lib/python3.11/dist-packages']
    Server time: Tue, 25 Mar 2025 10:59:25 +0100
    Installed Applications:
    ('hyperkitty',
    'postorius',
    'django_mailman3',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'django_gravatar',
    'compressor',
    'haystack',
    'django_extensions',
    'django_q',
    'allauth',
    'allauth.account',
    'allauth.socialaccount')
    Installed Middleware:
    ('django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django_mailman3.middleware.TimezoneMiddleware',
    'postorius.middleware.PostoriusMiddleware')


    Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
    File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 116, in __call__
    response = self.process_request(request)
    File "/usr/lib/python3/dist-packages/django/middleware/locale.py", line 25, in process_request
    translation.activate(language)
    File "/usr/lib/python3/dist-packages/django/utils/translation/__init__.py", line 225, in activate
    return _trans.activate(language)
    File "/usr/lib/python3/dist-packages/django/utils/translation/trans_real.py", line 285, in activate
    _active.value = translation(language)
    File "/usr/lib/python3/dist-packages/django/utils/translation/trans_real.py", line 274, in translation
    _translations[language] = DjangoTranslation(language)
    File "/usr/lib/python3/dist-packages/django/utils/translation/trans_real.py", line 161, in __init__
    self._add_installed_apps_translations()
    File "/usr/lib/python3/dist-packages/django/utils/translation/trans_real.py", line 209, in _add_installed_apps_translations
    translation = self._new_gnu_trans(localedir)
    File "/usr/lib/python3/dist-packages/django/utils/translation/trans_real.py", line 183, in _new_gnu_trans
    return gettext_module.translation(
    File "/usr/lib/python3.11/gettext.py", line 541, in translation
    t = _translations.setdefault(key, class_(fp))
    File "/usr/lib/python3.11/gettext.py", line 264, in __init__
    self._parse(fp)
    File "/usr/lib/python3.11/gettext.py", line 397, in _parse
    self.plural = c2py(plural)
    File "/usr/lib/python3.11/gettext.py", line 188, in c2py
    result, nexttok = _parse(_tokenize(plural))
    File "/usr/lib/python3.11/gettext.py", line 119, in _parse
    nexttok = next(tokens)
    File "/usr/lib/python3.11/gettext.py", line 93, in _tokenize
    raise ValueError('invalid token in plural form: %s' % value)

    Exception Type: ValueError at /postorius/lists/
    Exception Value: invalid token in plural form: EXPRESSION
    Request information:
    USER: [unable to retrieve the current user]

    GET: No GET data

    POST: No POST data

    FILES: No FILES data

    COOKIES: No cookie data

    META:
    CONTEXT_DOCUMENT_ROOT = '/var/www/html'
    CONTEXT_PREFIX = ''
    DOCUMENT_ROOT = '/var/www/html'
    GATEWAY_INTERFACE = 'CGI/1.1'
    HTTPS = 'on'
    HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'
    HTTP_ACCEPT_ENCODING = 'gzip, deflate, br, zstd'
    HTTP_ACCEPT_LANGUAGE = 'nn,nb-NO;q=0.9,nb;q=0.8,no;q=0.7,en-US;q=0.6,en;q=0.5' HTTP_CONNECTION = 'keep-alive'
    HTTP_HOST = 'lists.nuug.no'
    HTTP_SEC_CH_UA = '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"'
    HTTP_SEC_CH_UA_MOBILE = '?0'
    HTTP_SEC_CH_UA_PLATFORM = '"Windows"'
    HTTP_SEC_FETCH_DEST = 'document'
    HTTP_SEC_FETCH_MODE = 'navigate'
    HTTP_SEC_FETCH_SITE = 'same-site'
    HTTP_SEC_FETCH_USER = '?1'
    HTTP_UPGRADE_INSECURE_REQUESTS = '1'
    HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
    PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
    PATH_INFO = '/postorius/lists/'
    QUERY_STRING = ''
    REMOTE_ADDR = '155.55.51.185'
    REMOTE_PORT = '33883'
    REQUEST_METHOD = 'GET'
    REQUEST_SCHEME = 'https'
    REQUEST_URI = '/lister3/postorius/lists/'
    SCRIPT_FILENAME = 'proxy:uwsgi://localhost//postorius/lists/'
    SCRIPT_NAME = '/lister3'
    SCRIPT_URI = 'https://lists.nuug.no/lister3/postorius/lists/'
    SCRIPT_URL = '/lister3/postorius/lists/'
    SERVER_ADDR = '158.36.191.213'
    SERVER_ADMIN = '[no address given]'
    SERVER_NAME = 'lists.nuug.no'
    SERVER_PORT = '443'
    SERVER_PROTOCOL = 'HTTP/1.1'
    SERVER_SIGNATURE = '********************'
    SERVER_SOFTWARE = 'Apache'
    SSL_TLS_SNI = 'lists.nuug.no'
    uwsgi.core = 0
    uwsgi.node = b'geekbay'
    uwsgi.version = b'2.0.21-debian'
    wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'> wsgi.file_wrapper = <built-in function uwsgi_sendfile>
    wsgi.input = <uwsgi._Input object at 0x7fe3e35a94b0>
    wsgi.multiprocess = False
    wsgi.multithread = True
    wsgi.run_once = False
    wsgi.url_scheme = 'https'
    wsgi.version = '(1, 0)'

    Settings:
    Using settings module settings
    ABSOLUTE_URL_OVERRIDES = {}
    ACCOUNT_ADAPTER = 'django_mailman3.views.user_adapter.DisableSignupAdapter' ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
    ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
    ACCOUNT_EMAIL_REQUIRED = True
    ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
    ACCOUNT_UNIQUE_EMAIL = True
    ADMINS = "(('Mailman Suite Admin', 'drift@nuug.no'),)"
    ALLOWED_HOSTS = ['*']
    APPEND_SLASH = True
    AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
    AUTH_PASSWORD_VALIDATORS = '********************'
    AUTH_USER_MODEL = 'auth.User'
    BASE_DIR = '/usr/share/mailman3-web'
    CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
    CACHE_MIDDLEWARE_ALIAS = 'default'
    CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
    CACHE_MIDDLEWARE_SECONDS = 600
    COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
    COMPRESS_CACHEABLE_PRECOMPILERS = '()'
    COMPRESS_CACHE_BACKEND = 'default'
    COMPRESS_CACHE_KEY_FUNCTION = '********************' COMPRESS_CLEAN_CSS_ARGUMENTS = ''
    COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
    COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
    COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar' COMPRESS_CSS_HASHING_METHOD = 'mtime'
    COMPRESS_DATA_URI_MAX_SIZE = 1024
    COMPRESS_DEBUG_TOGGLE = None
    COMPRESS_ENABLED = True
    COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
    COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fe3eb0adda0>
    COMPRESS_MINT_DELAY = 30
    COMPRESS_MTIME_DELAY = 10
    COMPRESS_OFFLINE = True
    COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
    COMPRESS_OFFLINE_TIMEOUT = 31536000
    COMPRESS_OUTPUT_DIR = 'CACHE'
    COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
    COMPRESS_PRECOMPILERS = '()'
    COMPRESS_REBUILD_TIMEOUT = 2592000
    COMPRESS_ROOT = '/var/lib/mailman3/web/static'
    COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage' COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'} COMPRESS_URL = '/mailman3/static/'
    COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
    COMPRESS_VERBOSE = False
    COMPRESS_YUGLIFY_BINARY = 'yuglify'
    COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
    COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
    COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
    COMPRESS_YUI_CSS_ARGUMENTS = ''
    COMPRESS_YUI_JS_ARGUMENTS = ''
    CSRF_COOKIE_AGE = 31449600
    CSRF_COOKIE_DOMAIN = None
    CSRF_COOKIE_HTTPONLY = False
    CSRF_COOKIE_NAME = 'csrftoken'
    CSRF_COOKIE_PATH = '/'
    CSRF_COOKIE_SAMESITE = 'Lax'
    CSRF_COOKIE_SECURE = False
    CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
    CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
    CSRF_TRUSTED_ORIGINS = []
    CSRF_USE_SESSIONS = False
    DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/var/lib/mailman3/web/mailman3web.db', 'USER': '', 'PASSWORD': '********************', 'HOST': '', 'PORT': '', 'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_
    MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
    DATABASE_ROUTERS = []
    DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
    DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
    DATA_UPLOAD_MAX_NUMBER_FILES = 100
    DATETIME_FORMAT = 'N j, Y, P'
    DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
    DATE_FORMAT = 'N j, Y'
    DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
    DEBUG = False
    DEBUG_PROPAGATE_EXCEPTIONS = False
    DECIMAL_SEPARATOR = '.'
    DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
    DEFAULT_CHARSET = 'utf-8'
    DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
    DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' DEFAULT_FROM_EMAIL = 'root@nuug.no'
    DEFAULT_HASHING_ALGORITHM = 'sha256'
    DEFAULT_INDEX_TABLESPACE = ''
    DEFAULT_TABLESPACE = ''
    DISALLOWED_USER_AGENTS = []
    EMAILNAME = 'nuug.no'
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'localhost'
    EMAIL_HOST_PASSWORD = '********************'
    EMAIL_HOST_USER = ''
    EMAIL_PORT = 25
    EMAIL_SSL_CERTFILE = None
    EMAIL_SSL_KEYFILE = '********************'
    EMAIL_SUBJECT_PREFIX = '[Django] '
    EMAIL_TIMEOUT = None
    EMAIL_USE_LOCALTIME = False
    EMAIL_USE_SSL = False
    EMAIL_USE_TLS = False
    FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
    FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
    FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
    FILE_UPLOAD_PERMISSIONS = 420
    FILE_UPLOAD_TEMP_DIR = None
    FILTER_VHOST = False
    FIRST_DAY_OF_WEEK = 0
    FIXTURE_DIRS = []
    FORCE_SCRIPT_NAME = None
    FORMAT_MODULE_PATH = None
    FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
    HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
    HOSTNAME = 'localhost.local'
    HYPERKITTY_ALLOW_WEB_POSTING = False
    HYPERKITTY_ENABLE_GRAVATAR = False
    IGNORABLE_404_URLS = []
    INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', '
    rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
    INTERNAL_IPS = []
    LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', '
    Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian
    Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('
    ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', '
    Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', '
    Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', '
    Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('
    ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('
    zh-hant', 'Traditional Chinese')]
    LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
    LANGUAGE_CODE = 'en-us'
    LANGUAGE_COOKIE_AGE = None
    LANGUAGE_COOKIE_DOMAIN = None
    LANGUAGE_COOKIE_HTTPONLY = False
    LANGUAGE_COOKIE_NAME = 'django_language'
    LANGUAGE_COOKIE_PATH = '/'
    LANGUAGE_COOKIE_SAMESITE = None
    LANGUAGE_COOKIE_SECURE = False
    LOCALE_PATHS = []
    LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.
    AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers':
    {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'
    handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
    LOGGING_CONFIG = 'logging.config.dictConfig'
    LOGIN_REDIRECT_URL = 'list_index'
    LOGIN_URL = 'account_login'
    LOGOUT_REDIRECT_URL = None
    LOGOUT_URL = 'account_logout'
    MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '158.36.191.213')" MAILMAN_ARCHIVER_KEY = '********************'
    MAILMAN_REST_API_PASS = '********************'
    MAILMAN_REST_API_URL = '********************'
    MAILMAN_REST_API_USER = '********************'
    MANAGERS = []
    MEDIA_ROOT = ''
    MEDIA_URL = '/lister3/'
    MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' MESSAGE_TAGS = {40: 'danger'}
    MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.
    AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.
    middleware.PostoriusMiddleware')"
    MIGRATION_MODULES = {}
    MONTH_DAY_FORMAT = 'F j'
    NUMBER_GROUPING = 0
    PASSWORD_HASHERS = '********************'
    PASSWORD_RESET_TIMEOUT = '********************'
    PASSWORD_RESET_TIMEOUT_DAYS = '********************' POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
    PREPEND_WWW = False
    Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'retry': 360} ROOT_URLCONF = 'urls'
    SECRET_KEY = '********************'
    SECURE_BROWSER_XSS_FILTER = False
    SECURE_CONTENT_TYPE_NOSNIFF = True
    SECURE_HSTS_INCLUDE_SUBDOMAINS = False
    SECURE_HSTS_PRELOAD = False
    SECURE_HSTS_SECONDS = 0
    SECURE_PROXY_SSL_HEADER = None
    SECURE_REDIRECT_EXEMPT = []
    SECURE_REFERRER_POLICY = 'same-origin'
    SECURE_SSL_HOST = None
    SECURE_SSL_REDIRECT = False
    SERVER_EMAIL = 'root@nuug.no'
    SESSION_CACHE_ALIAS = 'default'
    SESSION_COOKIE_AGE = 1209600
    SESSION_COOKIE_DOMAIN = None
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_NAME = 'sessionid'
    SESSION_COOKIE_PATH = '/'
    SESSION_COOKIE_SAMESITE = 'Lax'
    SESSION_COOKIE_SECURE = False
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    SESSION_FILE_PATH = None
    SESSION_SAVE_EVERY_REQUEST = False
    SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' SETTINGS_MODULE = 'settings'
    SHORT_DATETIME_FORMAT = 'm/d/Y P'
    SHORT_DATE_FORMAT = 'm/d/Y'
    SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
    SILENCED_SYSTEM_CHECKS = []
    SITE_ID = 1
    SOCIALACCOUNT_PROVIDERS = {}
    STATICFILES_DIRS = '()'
    STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' STATIC_ROOT = '/var/lib/mailman3/web/static'
    STATIC_URL = '/mailman3/static/'
    TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_
    processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.
    contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
    TEST_NON_SERIALIZED_APPS = []
    TEST_RUNNER = 'django.test.runner.DiscoverRunner'
    THOUSAND_SEPARATOR = ','
    TIME_FORMAT = 'H'
    TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
    TIME_ZONE = 'Europe/Oslo'
    USE_I18N = True
    USE_L10N = True
    USE_THOUSAND_SEPARATOR = False
    USE_TZ = True
    USE_X_FORWARDED_HOST = True
    USE_X_FORWARDED_PORT = False
    WSGI_APPLICATION = 'wsgi.application'
    X_FRAME_OPTIONS = 'DENY'
    YEAR_MONTH_FORMAT = 'F Y'


    -------------------- End of forwarded message --------------------

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)