[B.A.T.M.A.N.] [PATCH 1/9] batctl: Move root privileges check in separate function

Sven Eckelmann
2017-01-22T12:21:05Z

functions.c | 8 ++++++++
functions.h | 1 +
main.c | 6 ++----
3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/functions.c b/functions.c
index f8bacda..c1aaf12 100644
--- a/functions.c
+++ b/functions.c
@@ -1138,3 +1138,11 @@ void get_random_bytes(void *buf, size_t buflen)

get_random_bytes_fallback(buf, buflen);
}
+
+void check_root_or_die(const char *cmd)
+{
+ if (getuid() || getgid()) {
+ fprintf(stderr, "Error - you must be root to run '%s' !\n", cmd);
+ exit(EXIT_FAILURE);
+ }
+}
diff --git a/functions.h b/functions.h
index b085f9d..eca1406 100644
--- a/functions.h
+++ b/functions.h
@@ -54,6 +54,7 @@ int check_mesh_iface(char *mesh_iface);
int check_mesh_iface_ownership(char *mesh_iface, char *hard_iface);

void get_random_bytes(void *buf, size_t buflen);
+void check_root_or_die(const char *cmd);

int print_routing_algos(void);
extern char *line_ptr;
diff --git a/main.c b/main.c
index 3f0b008..2fc9b75 100644
--- a/main.c
+++ b/main.c
@@ -136,10 +136,8 @@ int main(int argc, char **argv)

/* TODO: remove this generic check here and move it into the individual functions */
/* check if user is root */
- if ((strncmp(argv[1], "bisect", strlen("bisect")) != 0) && ((getuid()) || (getgid()))) {
- fprintf(stderr, "Error - you must be root to run '%s' !\n", argv[0]);
- exit(EXIT_FAILURE);
- }
+ if (strncmp(argv[1], "bisect", strlen("bisect")) != 0)
+ check_root_or_die(argv[0]);

if ((strcmp(argv[1], "interface") == 0) || (strcmp(argv[1], "if") == 0)) {

--
2.11.0