diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/change_identity.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libbb/change_identity.c b/libbb/change_identity.c index c2b73eeb8..adebad8ed 100644 --- a/libbb/change_identity.c +++ b/libbb/change_identity.c @@ -40,15 +40,23 @@ /* Become the user and group(s) specified by PW. */ -void change_identity ( const struct passwd *pw ) +const char *change_identity_e2str ( const struct passwd *pw ) { if ( initgroups ( pw-> pw_name, pw-> pw_gid ) == -1 ) - bb_perror_msg_and_die ( "cannot set groups" ); + return "cannot set groups"; endgrent ( ); if ( setgid ( pw-> pw_gid )) - bb_perror_msg_and_die ( "cannot set group id" ); + return "cannot set group id"; if ( setuid ( pw->pw_uid )) - bb_perror_msg_and_die ( "cannot set user id" ); + return "cannot set user id"; + return NULL; } +void change_identity ( const struct passwd *pw ) +{ + const char *err_msg = change_identity_e2str(pw); + + if(err_msg) + bb_perror_msg_and_die ( "%s", err_msg ); +} |