Record completion of Seriatim remediation
This commit is contained in:
@@ -127,3 +127,48 @@ Required remediation:
|
|||||||
`ansible-role-seriatim` commit `ca49dae` during the completion audit.
|
`ansible-role-seriatim` commit `ca49dae` during the completion audit.
|
||||||
- The expanded `tests/integration` suite passed after all remediation commits
|
- The expanded `tests/integration` suite passed after all remediation commits
|
||||||
and restored the default Seriatim installation.
|
and restored the default Seriatim installation.
|
||||||
|
|
||||||
|
## Completion Review
|
||||||
|
|
||||||
|
The four original findings are resolved, and the expanded integration suite
|
||||||
|
passes. A focused review of the malformed-state recovery identified one
|
||||||
|
additional edge case, which has also been resolved.
|
||||||
|
|
||||||
|
## Finding 5: A malformed build-state directory is not handled
|
||||||
|
|
||||||
|
Severity: medium
|
||||||
|
|
||||||
|
`tasks/build.yml` inspects the three state files beneath
|
||||||
|
`seriatim_build_state_dir` without first inspecting the state-directory path.
|
||||||
|
If that configured path exists as a regular file, the first
|
||||||
|
`ansible.builtin.stat` fails with `Not a directory`. This is an unhandled
|
||||||
|
malformed-state failure rather than the planned recovery behavior. A targeted
|
||||||
|
run with an otherwise valid custom binary confirmed that the role exits before
|
||||||
|
rebuilding or converging the state directory. A second targeted run using a
|
||||||
|
symbolic link as the state-directory path succeeded and wrote all three
|
||||||
|
root-owned state files into the link target while leaving the configured path
|
||||||
|
as a symbolic link.
|
||||||
|
|
||||||
|
Required remediation:
|
||||||
|
|
||||||
|
- Inspect `seriatim_build_state_dir` before inspecting any child state path.
|
||||||
|
- Define and implement deliberate behavior for an existing non-directory
|
||||||
|
object. Because the state directory is fully managed, replacing that object
|
||||||
|
and rebuilding is consistent with the existing malformed-state-file
|
||||||
|
behavior; alternatively, fail with a purpose-written assertion if preserving
|
||||||
|
an unexpected object is preferred.
|
||||||
|
- Ensure an existing symbolic link is not silently treated as the managed
|
||||||
|
state directory or used to redirect root-owned state writes.
|
||||||
|
- Add integration coverage for the selected non-directory behavior and require
|
||||||
|
an idempotent immediate repeat after recovery when recovery is supported.
|
||||||
|
|
||||||
|
Resolution:
|
||||||
|
|
||||||
|
- `ansible-role-seriatim` commit `6fb1aa2` makes the build-state directory
|
||||||
|
authoritative, replacing regular files and symbolic links with a root-owned
|
||||||
|
directory before inspecting child state.
|
||||||
|
- Integration coverage confirms repair and immediate idempotence for both
|
||||||
|
regular-file and symbolic-link drift, and confirms that the symbolic-link
|
||||||
|
target remains untouched.
|
||||||
|
- The complete integration suite passes and restores a verified default
|
||||||
|
installation.
|
||||||
|
|||||||
Reference in New Issue
Block a user