30 |
|
|
31 |
#include "libbb.h" |
#include "libbb.h" |
32 |
|
|
|
|
|
33 |
/* Become the user and group(s) specified by PW. */ |
/* Become the user and group(s) specified by PW. */ |
34 |
const char *change_identity_e2str(const struct passwd *pw) |
void FAST_FUNC change_identity(const struct passwd *pw) |
35 |
{ |
{ |
36 |
if (initgroups(pw->pw_name, pw->pw_gid) == -1) |
if (initgroups(pw->pw_name, pw->pw_gid) == -1) |
37 |
return "cannot set groups"; |
bb_perror_msg_and_die("can't set groups"); |
38 |
endgrent(); /* ?? */ |
endgrent(); /* helps to close a fd used internally by libc */ |
39 |
xsetgid(pw->pw_gid); |
xsetgid(pw->pw_gid); |
40 |
xsetuid(pw->pw_uid); |
xsetuid(pw->pw_uid); |
|
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); |
|
41 |
} |
} |