From: Lennart Poettering Date: Mon, 11 Dec 2017 22:10:11 +0000 (+0100) Subject: verbs: add a new VERB_MUSTBEROOT flag X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=6aafa2772c1c1b27960edf368a9a9ac85bb64dc8;p=elogind.git verbs: add a new VERB_MUSTBEROOT flag Given that we regularly have verbs that require privileges, let's just make this a flag of the verb. --- diff --git a/src/basic/verbs.c b/src/basic/verbs.c index d9cdb38d6..f446d1c9b 100644 --- a/src/basic/verbs.c +++ b/src/basic/verbs.c @@ -32,7 +32,7 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) { const Verb *verb; const char *name; unsigned i; - int left; + int left, r; assert(verbs); assert(verbs[0].dispatch); @@ -88,6 +88,12 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) { return 0; } + if (verb->flags & VERB_MUSTBEROOT) { + r = must_be_root(); + if (r < 0) + return r; + } + if (name) return verb->dispatch(left, argv + optind, userdata); else { diff --git a/src/basic/verbs.h b/src/basic/verbs.h index 7b5e18510..05678af41 100644 --- a/src/basic/verbs.h +++ b/src/basic/verbs.h @@ -20,13 +20,17 @@ ***/ #define VERB_ANY ((unsigned) -1) -#define VERB_DEFAULT 1U -#define VERB_NOCHROOT 2U + +typedef enum VerbFlags { + VERB_DEFAULT = 1 << 0, + VERB_NOCHROOT = 1 << 1, + VERB_MUSTBEROOT = 1 << 2, +} VerbFlags; typedef struct { const char *verb; unsigned min_args, max_args; - unsigned flags; + VerbFlags flags; int (* const dispatch)(int argc, char *argv[], void *userdata); } Verb;