diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index d1359402df..3bf9ea02d5 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -140,11 +140,8 @@ __attribute__((__noreturn__)) void sigint(void) { zlog_notice("Terminating on signal"); - if (!retain_mode) { + if (!retain_mode) bgp_terminate(); - if (bgpd_privs.user) /* NULL if skip_runas flag set */ - zprivs_terminate(&bgpd_privs); - } bgp_exit(0); diff --git a/lib/privs.c b/lib/privs.c index eda3fb02d4..cfe7d6d6f8 100644 --- a/lib/privs.c +++ b/lib/privs.c @@ -856,7 +856,9 @@ void zprivs_terminate(struct zebra_privs_t *zprivs) } #ifdef HAVE_CAPABILITIES - zprivs_caps_terminate(); + if (zprivs->user || zprivs->group || zprivs->cap_num_p + || zprivs->cap_num_i) + zprivs_caps_terminate(); #else /* !HAVE_CAPABILITIES */ /* only change uid if we don't have the correct one */ if ((zprivs_state.zuid) && (zprivs_state.zsuid != zprivs_state.zuid)) {