Fix stale run_blocking call sites in log preview and config services
This commit is contained in:
@@ -37,6 +37,8 @@ If the runtime DB creation fails (e.g., path does not exist, permission denied)
|
|||||||
|
|
||||||
### Task 2 — Fix log_service.preview_log: stale run_blocking call site
|
### Task 2 — Fix log_service.preview_log: stale run_blocking call site
|
||||||
|
|
||||||
|
**Status:** Completed
|
||||||
|
|
||||||
**Severity:** Bug
|
**Severity:** Bug
|
||||||
|
|
||||||
**Where:**
|
**Where:**
|
||||||
|
|||||||
@@ -981,9 +981,7 @@ async def assign_action_to_jail(
|
|||||||
else:
|
else:
|
||||||
action_entry = req.action_name
|
action_entry = req.action_name
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_append_jail_action_sync,
|
||||||
None,
|
|
||||||
_append_jail_action_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
action_entry,
|
action_entry,
|
||||||
@@ -1043,9 +1041,7 @@ async def remove_action_from_jail(
|
|||||||
if jail_name not in all_jails:
|
if jail_name not in all_jails:
|
||||||
raise JailNotFoundInConfigError(jail_name)
|
raise JailNotFoundInConfigError(jail_name)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_remove_jail_action_sync,
|
||||||
None,
|
|
||||||
_remove_jail_action_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
action_name,
|
action_name,
|
||||||
|
|||||||
@@ -1099,8 +1099,7 @@ async def list_inactive_jails(
|
|||||||
inactive jails.
|
inactive jails.
|
||||||
"""
|
"""
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
parsed_result: tuple[dict[str, dict[str, str]], dict[str, str]] = await run_blocking(
|
parsed_result: tuple[dict[str, dict[str, str]], dict[str, str]] = await run_blocking(_parse_jails_sync, Path(config_dir)
|
||||||
None, _parse_jails_sync, Path(config_dir)
|
|
||||||
)
|
)
|
||||||
all_jails, source_files = parsed_result
|
all_jails, source_files = parsed_result
|
||||||
active_names: set[str] = await _get_active_jail_names(socket_path)
|
active_names: set[str] = await _get_active_jail_names(socket_path)
|
||||||
@@ -1169,8 +1168,7 @@ async def activate_jail(
|
|||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
# Pre-activation validation — collect warnings but do not block #
|
# Pre-activation validation — collect warnings but do not block #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
validation_result: JailValidationResult = await run_blocking(
|
validation_result: JailValidationResult = await run_blocking(_validate_jail_config_sync, Path(config_dir), name
|
||||||
None, _validate_jail_config_sync, Path(config_dir), name
|
|
||||||
)
|
)
|
||||||
warnings: list[str] = [f"{i.field}: {i.message}" for i in validation_result.issues]
|
warnings: list[str] = [f"{i.field}: {i.message}" for i in validation_result.issues]
|
||||||
if warnings:
|
if warnings:
|
||||||
@@ -1209,14 +1207,10 @@ async def activate_jail(
|
|||||||
# we can restore it if activation fails. #
|
# we can restore it if activation fails. #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
local_path = Path(config_dir) / "jail.d" / f"{name}.local"
|
local_path = Path(config_dir) / "jail.d" / f"{name}.local"
|
||||||
original_content: bytes | None = await run_blocking(
|
original_content: bytes | None = await run_blocking(lambda: local_path.read_bytes() if local_path.exists() else None,
|
||||||
None,
|
|
||||||
lambda: local_path.read_bytes() if local_path.exists() else None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
True,
|
True,
|
||||||
@@ -1427,9 +1421,7 @@ async def deactivate_jail(
|
|||||||
if name not in active_names:
|
if name not in active_names:
|
||||||
raise JailAlreadyInactiveError(name)
|
raise JailAlreadyInactiveError(name)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
False,
|
False,
|
||||||
@@ -1516,9 +1508,7 @@ async def validate_jail_config(
|
|||||||
"""
|
"""
|
||||||
_safe_jail_name(name)
|
_safe_jail_name(name)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
return await run_blocking(
|
return await run_blocking(_validate_jail_config_sync,
|
||||||
None,
|
|
||||||
_validate_jail_config_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
)
|
)
|
||||||
@@ -1555,9 +1545,7 @@ async def rollback_jail(
|
|||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
# Write enabled=false — this must succeed even when fail2ban is down.
|
# Write enabled=false — this must succeed even when fail2ban is down.
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
False,
|
False,
|
||||||
@@ -2184,9 +2172,7 @@ async def assign_filter_to_jail(
|
|||||||
|
|
||||||
await run_blocking( _check_filter)
|
await run_blocking( _check_filter)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_set_jail_local_key_sync,
|
||||||
None,
|
|
||||||
_set_jail_local_key_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
"filter",
|
"filter",
|
||||||
@@ -3037,9 +3023,7 @@ async def assign_action_to_jail(
|
|||||||
else:
|
else:
|
||||||
action_entry = req.action_name
|
action_entry = req.action_name
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_append_jail_action_sync,
|
||||||
None,
|
|
||||||
_append_jail_action_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
action_entry,
|
action_entry,
|
||||||
@@ -3099,9 +3083,7 @@ async def remove_action_from_jail(
|
|||||||
if jail_name not in all_jails:
|
if jail_name not in all_jails:
|
||||||
raise JailNotFoundInConfigError(jail_name)
|
raise JailNotFoundInConfigError(jail_name)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_remove_jail_action_sync,
|
||||||
None,
|
|
||||||
_remove_jail_action_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
action_name,
|
action_name,
|
||||||
|
|||||||
@@ -899,9 +899,7 @@ async def assign_filter_to_jail(
|
|||||||
|
|
||||||
await run_blocking( _check_filter)
|
await run_blocking( _check_filter)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_set_jail_local_key_sync,
|
||||||
None,
|
|
||||||
_set_jail_local_key_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
jail_name,
|
jail_name,
|
||||||
"filter",
|
"filter",
|
||||||
|
|||||||
@@ -503,8 +503,7 @@ async def list_inactive_jails(
|
|||||||
inactive jails.
|
inactive jails.
|
||||||
"""
|
"""
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
parsed_result: tuple[dict[str, dict[str, str]], dict[str, str]] = await run_blocking(
|
parsed_result: tuple[dict[str, dict[str, str]], dict[str, str]] = await run_blocking(_parse_jails_sync, Path(config_dir)
|
||||||
None, _parse_jails_sync, Path(config_dir)
|
|
||||||
)
|
)
|
||||||
all_jails, source_files = parsed_result
|
all_jails, source_files = parsed_result
|
||||||
active_names: set[str] = await _get_active_jail_names(socket_path)
|
active_names: set[str] = await _get_active_jail_names(socket_path)
|
||||||
@@ -601,8 +600,7 @@ async def _activate_jail(
|
|||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
# Pre-activation validation — collect warnings but do not block #
|
# Pre-activation validation — collect warnings but do not block #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
validation_result: JailValidationResult = await run_blocking(
|
validation_result: JailValidationResult = await run_blocking(_validate_jail_config_sync, Path(config_dir), name
|
||||||
None, _validate_jail_config_sync, Path(config_dir), name
|
|
||||||
)
|
)
|
||||||
warnings: list[str] = [f"{i.field}: {i.message}" for i in validation_result.issues]
|
warnings: list[str] = [f"{i.field}: {i.message}" for i in validation_result.issues]
|
||||||
if warnings:
|
if warnings:
|
||||||
@@ -641,14 +639,10 @@ async def _activate_jail(
|
|||||||
# we can restore it if activation fails. #
|
# we can restore it if activation fails. #
|
||||||
# ---------------------------------------------------------------------- #
|
# ---------------------------------------------------------------------- #
|
||||||
local_path = Path(config_dir) / "jail.d" / f"{name}.local"
|
local_path = Path(config_dir) / "jail.d" / f"{name}.local"
|
||||||
original_content: bytes | None = await run_blocking(
|
original_content: bytes | None = await run_blocking(lambda: local_path.read_bytes() if local_path.exists() else None,
|
||||||
None,
|
|
||||||
lambda: local_path.read_bytes() if local_path.exists() else None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
True,
|
True,
|
||||||
@@ -876,9 +870,7 @@ async def _deactivate_jail(
|
|||||||
if name not in active_names:
|
if name not in active_names:
|
||||||
raise JailAlreadyInactiveError(name)
|
raise JailAlreadyInactiveError(name)
|
||||||
|
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
False,
|
False,
|
||||||
@@ -965,9 +957,7 @@ async def validate_jail_config(
|
|||||||
"""
|
"""
|
||||||
_safe_jail_name(name)
|
_safe_jail_name(name)
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
return await run_blocking(
|
return await run_blocking(_validate_jail_config_sync,
|
||||||
None,
|
|
||||||
_validate_jail_config_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
)
|
)
|
||||||
@@ -1021,9 +1011,7 @@ async def _rollback_jail(
|
|||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
# Write enabled=false — this must succeed even when fail2ban is down.
|
# Write enabled=false — this must succeed even when fail2ban is down.
|
||||||
await run_blocking(
|
await run_blocking(_write_local_override_sync,
|
||||||
None,
|
|
||||||
_write_local_override_sync,
|
|
||||||
Path(config_dir),
|
Path(config_dir),
|
||||||
name,
|
name,
|
||||||
False,
|
False,
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ async def preview_log(req: LogPreviewRequest) -> LogPreviewResponse:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
raw_lines = await run_blocking(
|
raw_lines = await run_blocking(
|
||||||
None,
|
|
||||||
_read_tail_lines,
|
_read_tail_lines,
|
||||||
str(path),
|
str(path),
|
||||||
req.num_lines,
|
req.num_lines,
|
||||||
|
|||||||
Reference in New Issue
Block a user