diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/privs.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/privs.c b/lib/privs.c index 174618a0..0ee8d60d 100644 --- a/lib/privs.c +++ b/lib/privs.c @@ -119,17 +119,16 @@ zebra_privs_current_t zprivs_state_caps (void) { int i; - cap_flag_t flag; cap_flag_value_t val; - for (i=0; i < zprivs_state.syscaps_num_p; i++) + for (i=0; i < zprivs_state.sys_num_p; i++) { if ( cap_get_flag (zprivs_state.caps, zprivs_state.syscaps_p[i], CAP_EFFECTIVE, &val) ) zlog_warn ("zprivs_state_caps: could not cap_get_flag, %s", strerror (errno) ); if (val == CAP_SET) - return CAP_RAISED; + return ZPRIVS_RAISED; } return ZPRIVS_LOWERED; } @@ -219,7 +218,7 @@ zprivs_init(struct zebra_privs_t *zprivs) /* Tell kernel we want caps maintained across uid changes */ if ( prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1 ) { - zlog_err("privs_init: could not set PR_SET_KEEPCAPS, %s" + zlog_err("privs_init: could not set PR_SET_KEEPCAPS, %s", strerror (errno) ); exit(1); } @@ -231,13 +230,13 @@ zprivs_init(struct zebra_privs_t *zprivs) if ( !(zprivs_state.caps = cap_init()) ) { - zlog_err ("privs_init: failed to cap_init, %s" strerror (errno) ); + zlog_err ("privs_init: failed to cap_init, %s", strerror (errno) ); exit (1); } if ( cap_clear (zprivs_state.caps) ) { - zlog_err ("privs_init: failed to cap_clear, %s" strerror (errno)); + zlog_err ("privs_init: failed to cap_clear, %s", strerror (errno)); exit (1); } @@ -274,7 +273,7 @@ zprivs_init(struct zebra_privs_t *zprivs) { if ( setreuid (zprivs_state.zuid, zprivs_state.zuid) ) { - zlog_err ("privs_init (cap): could not setreuid: %s", strerror (errno) ); + zlog_err ("privs_init (cap): could not setreuid, %s", strerror (errno) ); exit (1); } } @@ -287,7 +286,7 @@ zprivs_init(struct zebra_privs_t *zprivs) 1, cap_setuid_value, CAP_CLEAR); if ( cap_set_proc (zprivs_state.caps) ) { - zlog_err ("privs_init: cap_set_proc failed to clear cap_setuid, %s" + zlog_err ("privs_init: cap_set_proc failed to clear cap_setuid, %s", strerror (errno) ); exit (1); } @@ -305,7 +304,7 @@ zprivs_init(struct zebra_privs_t *zprivs) { if ( setreuid (-1, zprivs_state.zuid) ) { - zlog_err ("privs_init (uid): could not setreuid: %s", strerror (errno)); + zlog_err ("privs_init (uid): could not setreuid, %s", strerror (errno)); exit (1); } } @@ -318,21 +317,23 @@ zprivs_init(struct zebra_privs_t *zprivs) void zprivs_terminate (void) { + #ifdef HAVE_LCAPS - if (zprivs_state) - cap_clear (zprivs_state.caps); + + if (zprivs_state.caps) + cap_clear (zprivs_state.caps); if ( cap_set_proc (zprivs_state.caps) ) { - zlog_err ("privs_terminate: cap_set_proc failed, %s" + zlog_err ("privs_terminate: cap_set_proc failed, %s", strerror (errno) ); exit (1); } - if (zprivs_state.syscaps_num_p) + if (zprivs_state.sys_num_p) XFREE (MTYPE_PRIVS, zprivs_state.syscaps_p); - if (zprivs_state.syscaps_num_i) + if (zprivs_state.sys_num_i) XFREE (MTYPE_PRIVS, zprivs_state.syscaps_i); cap_free (zprivs_state.caps); @@ -341,7 +342,7 @@ zprivs_terminate (void) { if ( setreuid (zprivs_state.zuid, zprivs_state.zuid) ) { - zlog_err ("privs_terminate: could not setreuid: %s", + zlog_err ("privs_terminate: could not setreuid, %s", strerror (errno) ); exit (1); } |