X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fverify%2Fverify.c;h=c1a3da8d14492015b0a019c46d0cc6cc33cb9285;hb=0e8415f2e5c42e87ca3b7a96138675f64696cb7a;hp=fc513b1b69b1a531c8904160191654cd0b970075;hpb=8b835fccdad78d89f9cc64f9b02059fb75ffbab1;p=elogind.git diff --git a/src/verify/verify.c b/src/verify/verify.c index fc513b1b6..c1a3da8d1 100644 --- a/src/verify/verify.c +++ b/src/verify/verify.c @@ -27,8 +27,10 @@ #include "log.h" #include "strv.h" #include "build.h" +#include "pager.h" SystemdRunningAs arg_running_as = SYSTEMD_SYSTEM; +bool arg_no_man = false; static int generate_path(char **var, char **filenames) { char **filename; @@ -140,6 +142,37 @@ static int verify_executables(Unit *u) { return r; } +static int verify_documentation(Unit *u) { + char **p; + int r = 0, k; + + if (arg_no_man) + return 0; + + STRV_FOREACH(p, u->documentation) { + log_debug_unit(u->id, "%s: found documentation item %s.", u->id, *p); + if (startswith(*p, "man:")) { + k = show_man_page(*p + 4, true); + if (k != 0) { + if (k < 0) + log_error_unit(u->id, "%s: can't show %s: %s", + u->id, *p, strerror(-r)); + else { + log_error_unit(u->id, "%s: man %s command failed with code %d", + u->id, *p + 4, k); + k = -ENOEXEC; + } + if (r == 0) + r = k; + } + } + } + + /* Check remote URLs? */ + + return r; +} + static int test_unit(Unit *u) { _cleanup_bus_error_free_ sd_bus_error err = SD_BUS_ERROR_NULL; Job *j; @@ -167,6 +200,10 @@ static int test_unit(Unit *u) { if (k < 0 && r == 0) r = k; + k = verify_documentation(u); + if (k < 0 && r == 0) + r = k; + return r; } @@ -241,9 +278,10 @@ static void help(void) { "Check if unit files can be correctly loaded.\n\n" " -h --help Show this help\n" " --version Show package version\n" - " --system Connect to system manager\n" - " --user Connect to user service manager\n", - program_invocation_short_name); + " --system Test system units\n" + " --user Test user units\n" + " --no-man Do not check for existence of man pages\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -251,6 +289,7 @@ static int parse_argv(int argc, char *argv[]) { ARG_VERSION = 0x100, ARG_USER, ARG_SYSTEM, + ARG_NO_MAN, }; static const struct option options[] = { @@ -288,6 +327,10 @@ static int parse_argv(int argc, char *argv[]) { arg_running_as = SYSTEMD_SYSTEM; break; + case ARG_NO_MAN: + arg_no_man = true; + break; + case '?': log_error("Unknown option %s.", argv[optind-1]); return -EINVAL;