chiark / gitweb /
verbs: add a new VERB_MUSTBEROOT flag
authorLennart Poettering <lennart@poettering.net>
Mon, 11 Dec 2017 22:10:11 +0000 (23:10 +0100)
committerSven Eden <yamakuzure@gmx.net>
Mon, 11 Dec 2017 22:10:11 +0000 (23:10 +0100)
Given that we regularly have verbs that require privileges, let's just
make this a flag of the verb.

src/basic/verbs.c
src/basic/verbs.h

index d9cdb38d651feb9194ff40b34370549bce61373c..f446d1c9b8241728bbc73f67e61ee2a4a0fa20b3 100644 (file)
@@ -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 {
index 7b5e18510f1099001daeea1fc7055dec0ebe18cb..05678af41e1f6858c9f2511922aea01f68329792 100644 (file)
 ***/
 
 #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;