summaryrefslogtreecommitdiff
path: root/lib/privs.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-06-21 11:22:51 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-06-21 11:22:51 -0400
commit8e04538cae48d44ab6c917d4428303de44e7f0b2 (patch)
tree44bf2524c39a38c15c278f5f7315467c0843fee4 /lib/privs.c
parentaa7413195772bdd847fd7d5e6c9a9eb473de83ac (diff)
lib: Fix privs when using HAVE_CAPABILITIES
If your daemon does not need any special privileges and you are compiling with HAVE_CAPABILIES, the zprivs->change pointer will end up NULL due to the way zprivs_caps_init. So as a check let's add a NULL check for zprivs->change and set it to a function that will do nothing. This change prevents a crash if you raise privileges when your daemon needs no special privileges. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'lib/privs.c')
-rw-r--r--lib/privs.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/privs.c b/lib/privs.c
index cfe7d6d6f8..7c99742d34 100644
--- a/lib/privs.c
+++ b/lib/privs.c
@@ -824,6 +824,19 @@ void zprivs_init(struct zebra_privs_t *zprivs)
#ifdef HAVE_CAPABILITIES
zprivs_caps_init(zprivs);
+
+ /*
+ * If we have initialized the system with no requested
+ * capabilities, change will not have been set
+ * to anything by zprivs_caps_init, As such
+ * we should make sure that when we attempt
+ * to raize privileges that we actually have
+ * a do nothing function to call instead of a
+ * crash :).
+ */
+ if (!zprivs->change)
+ zprivs->change = zprivs_change_null;
+
#else /* !HAVE_CAPABILITIES */
/* we dont have caps. we'll need to maintain rid and saved uid
* and change euid back to saved uid (who we presume has all neccessary