diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c index 4cfbdfa5ab..8275360adc 100644 --- a/src/analyze/analyze-verify.c +++ b/src/analyze/analyze-verify.c @@ -124,10 +124,13 @@ static int verify_socket(Unit *u) { return 0; } -static int verify_executable(Unit *u, ExecCommand *exec) { +int verify_executable(Unit *u, const ExecCommand *exec) { if (!exec) return 0; + if (exec->flags & EXEC_COMMAND_IGNORE_FAILURE) + return 0; + if (access(exec->path, X_OK) < 0) return log_unit_error_errno(u, errno, "Command %s is not executable: %m", exec->path); diff --git a/src/analyze/analyze-verify.h b/src/analyze/analyze-verify.h index 3561d4302b..3da2cf7097 100644 --- a/src/analyze/analyze-verify.h +++ b/src/analyze/analyze-verify.h @@ -3,6 +3,8 @@ #include +#include "execute.h" #include "path-lookup.h" +int verify_executable(Unit *u, const ExecCommand *exec); int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators); diff --git a/src/analyze/test-verify.c b/src/analyze/test-verify.c new file mode 100644 index 0000000000..dcbb6394c6 --- /dev/null +++ b/src/analyze/test-verify.c @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +#include "analyze-verify.h" +#include "tests.h" + +static void test_verify_nonexistent(void) { + /* Negative cases */ + assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/non/existent"}) == 0); + assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/non/existent"}) < 0); + + /* Ordinary cases */ + assert_se(verify_executable(NULL, &(ExecCommand) {.path = (char*) "/bin/echo"}) == 0); + assert_se(verify_executable(NULL, &(ExecCommand) {.flags = EXEC_COMMAND_IGNORE_FAILURE, .path = (char*) "/bin/echo"}) == 0); +} + +int main(int argc, char *argv[]) { + test_setup_logging(LOG_DEBUG); + + test_verify_nonexistent(); +} diff --git a/src/test/meson.build b/src/test/meson.build index a674d6cfe9..7f96be8f55 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -1127,6 +1127,10 @@ tests += [ [], []], + [['src/analyze/test-verify.c', 'src/analyze/analyze-verify.c', 'src/analyze/analyze-verify.h'], + [libcore, libshared], + []], + [['src/login/test-inhibit.c'], [], [],