blob: 6a8a6b4d2409c640c3ff2ed55767e44327864b8a [file] [log] [blame]
From dc3867058d672f92598166eacab6ca1a560d50ec Mon Sep 17 00:00:00 2001
From: Micah Morton <mortonm@chromium.org>
Date: Fri, 20 Apr 2018 11:54:26 -0700
Subject: [PATCH] Allow pppd to start as non-root.
This patch adds #ifndef macros in 2 spots in order to allow pppd to be
spawned as a non-root user with only runtime capabilities (e.g.
CAP_NET_{RAW/ADMIN}) instead of giving pppd full root privileges. This
is helpful if pppd is itself spawned by a non-root user and the use of
file permissions (e.g. setuid-root) on the pppd binary is not a
desirable solution.
---
pppd/main.c | 2 ++
pppd/options.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/pppd/main.c b/pppd/main.c
index 87a5d29..fc9b322 100644
--- a/pppd/main.c
+++ b/pppd/main.c
@@ -359,6 +359,7 @@ main(int argc, char *argv[])
if (debug)
setlogmask(LOG_UPTO(LOG_DEBUG));
+#ifndef ALLOW_START_AS_NON_ROOT
/*
* Check that we are running as root.
*/
@@ -367,6 +368,7 @@ main(int argc, char *argv[])
argv[0]);
exit(EXIT_NOT_ROOT);
}
+#endif
if (!ppp_available()) {
option_error("%s", no_ppp_msg);
diff --git a/pppd/options.c b/pppd/options.c
index f8d6c00..2272912 100644
--- a/pppd/options.c
+++ b/pppd/options.c
@@ -694,11 +694,13 @@ process_option(option_t *opt, char *cmd, char **argv)
opt->name, optopt);
return 0;
}
+#ifndef ALLOW_START_AS_NON_ROOT
if ((opt->flags & OPT_PRIV) && !privileged_option) {
option_error("using the %s%s requires root privilege",
opt->name, optopt);
return 0;
}
+#endif
if ((opt->flags & OPT_ENABLE) && *(bool *)(opt->addr2) == 0) {
option_error("%s%s is disabled", opt->name, optopt);
return 0;
--
2.30.1