Prevent race condition in directory creation (#4362)

Checking whether a path does not exist before trying to create it does
not follow the Python paradigm of asking for forgiveness, rather than
permission, and opens up a time-of-check to time-of-use race.
This commit is contained in:
Martin Weinelt
2024-08-01 13:12:00 +02:00
committed by GitHub
parent cb833cc6da
commit 9cef63d641

View File

@@ -38,6 +38,7 @@ import logging
import os import os
import sys import sys
from json import loads from json import loads
from pathlib import Path
from urllib.parse import urlparse from urllib.parse import urlparse
import importlib_metadata as metadata import importlib_metadata as metadata
@@ -70,14 +71,10 @@ MEDIA_ROOT = os.path.join(DATA_DIR, 'media')
PROFILE_DIR = os.path.join(DATA_DIR, 'profiles') PROFILE_DIR = os.path.join(DATA_DIR, 'profiles')
CACHE_DIR = config.get('pretix', 'cachedir', fallback=os.path.join(DATA_DIR, 'cache')) CACHE_DIR = config.get('pretix', 'cachedir', fallback=os.path.join(DATA_DIR, 'cache'))
if not os.path.exists(DATA_DIR): Path(DATA_DIR).mkdir(parents=False, exist_ok=True)
os.mkdir(DATA_DIR) Path(LOG_DIR).mkdir(parents=False, exist_ok=True)
if not os.path.exists(LOG_DIR): Path(MEDIA_ROOT).mkdir(parents=False, exist_ok=True)
os.mkdir(LOG_DIR) Path(CACHE_DIR).mkdir(parents=False, exist_ok=True)
if not os.path.exists(MEDIA_ROOT):
os.mkdir(MEDIA_ROOT)
if not os.path.exists(CACHE_DIR):
os.mkdir(CACHE_DIR)
if config.has_option('django', 'secret'): if config.has_option('django', 'secret'):
SECRET_KEY = config.get('django', 'secret') SECRET_KEY = config.get('django', 'secret')