summaryrefslogtreecommitdiff
path: root/lib/privs.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2017-08-09 20:42:27 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2017-08-09 20:42:27 +0200
commit4e1fd26a5ef5adb25d53c2acbd9dbe8d18652ef5 (patch)
treec3cffc3302835c7a9ee2ef5388579b5a8d473ee3 /lib/privs.c
parent5d13cd091a183601eb8ebedeeeed2121ce4c3781 (diff)
parentfc73dd4bdf96cbab00e7d5de67ec56503c6d9783 (diff)
Merge remote-tracking branch 'frr/master' into tcp-zebra
Diffstat (limited to 'lib/privs.c')
-rw-r--r--lib/privs.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/privs.c b/lib/privs.c
index c971596117..eda3fb02d4 100644
--- a/lib/privs.c
+++ b/lib/privs.c
@@ -696,13 +696,10 @@ static int getgrouplist(const char *user, gid_t group, gid_t *groups,
}
#endif /* HAVE_GETGROUPLIST */
-void zprivs_init(struct zebra_privs_t *zprivs)
+void zprivs_preinit(struct zebra_privs_t *zprivs)
{
struct passwd *pwentry = NULL;
struct group *grentry = NULL;
- gid_t groups[NGROUPS_MAX];
- int i, ngroups = 0;
- int found = 0;
if (!zprivs) {
fprintf(stderr, "zprivs_init: called with NULL arg!\n");
@@ -751,6 +748,18 @@ void zprivs_init(struct zebra_privs_t *zprivs)
zprivs_state.zgid = grentry->gr_gid;
}
+}
+
+void zprivs_init(struct zebra_privs_t *zprivs)
+{
+ gid_t groups[NGROUPS_MAX];
+ int i, ngroups = 0;
+ int found = 0;
+
+ /* NULL privs */
+ if (!(zprivs->user || zprivs->group || zprivs->cap_num_p
+ || zprivs->cap_num_i))
+ return;
if (zprivs->user) {
ngroups = sizeof(groups);