The event loop (even after it was brought into one place in _run in the previous commit) was hard to follow. The states and transitions weren't clear or documented, and the privilege escalation code was non-blocking while the rest was blocking. Now we have a state machine with four states: awaiting_prompt, awaiting_escalation, ready_to_send (initial data), and awaiting_exit. The actions in each state and the transitions between then are clearly documented. The check_incorrect_password() method no longer checks for empty strings (since they will always match), and check_become_success() uses equality rather than a substring match to avoid thinking an echoed command is an indication of successful escalation. Also adds a check_missing_password connection method to detect the error from sudo -n/doas -n. |
||
---|---|---|
.. | ||
role | ||
__init__.py | ||
attribute.py | ||
base.py | ||
become.py | ||
block.py | ||
conditional.py | ||
handler.py | ||
helpers.py | ||
included_file.py | ||
play.py | ||
play_context.py | ||
playbook_include.py | ||
taggable.py | ||
task.py | ||
vars.py | ||
vars_file.py |