Essentially the same logic as in conf_files_list() was independently implemented in do_execute(). With previous commit, do_execute() can just call conf_files_list() to get a list of executable paths.
This corrects an error in error handling: if execution fails, we should never use return, but immediately _exit().
It's a fairly specialized function. Let's make new files for it and the tests.