libbb: introduce and use chdir_or_warn()
function old new delta chdir_or_warn - 37 +37 send_cgi_and_exit 720 711 -9 xchdir 27 15 -12 setup_environment 233 217 -16 fork_job 449 433 -16 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/4 up/down: 37/-53) Total: -16 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
931c55f9e2
commit
c2788f88f4
@ -645,6 +645,7 @@ void xsetgid(gid_t gid) FAST_FUNC;
|
|||||||
void xsetuid(uid_t uid) FAST_FUNC;
|
void xsetuid(uid_t uid) FAST_FUNC;
|
||||||
void xsetegid(gid_t egid) FAST_FUNC;
|
void xsetegid(gid_t egid) FAST_FUNC;
|
||||||
void xseteuid(uid_t euid) FAST_FUNC;
|
void xseteuid(uid_t euid) FAST_FUNC;
|
||||||
|
int chdir_or_warn(const char *path) FAST_FUNC;
|
||||||
void xchdir(const char *path) FAST_FUNC;
|
void xchdir(const char *path) FAST_FUNC;
|
||||||
void xfchdir(int fd) FAST_FUNC;
|
void xfchdir(int fd) FAST_FUNC;
|
||||||
void xchroot(const char *path) FAST_FUNC;
|
void xchroot(const char *path) FAST_FUNC;
|
||||||
|
@ -37,8 +37,7 @@ void FAST_FUNC setup_environment(const char *shell, int flags, const struct pass
|
|||||||
/* Change the current working directory to be the home directory
|
/* Change the current working directory to be the home directory
|
||||||
* of the user */
|
* of the user */
|
||||||
if (flags & SETUP_ENV_CHDIR) {
|
if (flags & SETUP_ENV_CHDIR) {
|
||||||
if (chdir(pw->pw_dir) != 0) {
|
if (chdir_or_warn(pw->pw_dir) != 0) {
|
||||||
bb_error_msg("can't change directory to '%s'", pw->pw_dir);
|
|
||||||
xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/");
|
xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -415,11 +415,18 @@ void FAST_FUNC xseteuid(uid_t euid)
|
|||||||
if (seteuid(euid)) bb_simple_perror_msg_and_die("seteuid");
|
if (seteuid(euid)) bb_simple_perror_msg_and_die("seteuid");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FAST_FUNC chdir_or_warn(const char *path)
|
||||||
|
{
|
||||||
|
int r = chdir(path);
|
||||||
|
if (r != 0)
|
||||||
|
bb_perror_msg("can't change directory to '%s'", path);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
// Die if we can't chdir to a new path.
|
// Die if we can't chdir to a new path.
|
||||||
void FAST_FUNC xchdir(const char *path)
|
void FAST_FUNC xchdir(const char *path)
|
||||||
{
|
{
|
||||||
if (chdir(path))
|
if (chdir_or_warn(path) != 0)
|
||||||
bb_perror_msg_and_die("can't change directory to '%s'", path);
|
xfunc_die();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FAST_FUNC xfchdir(int fd)
|
void FAST_FUNC xfchdir(int fd)
|
||||||
|
@ -675,8 +675,7 @@ static void change_user(struct passwd *pas)
|
|||||||
{
|
{
|
||||||
/* careful: we're after vfork! */
|
/* careful: we're after vfork! */
|
||||||
change_identity(pas); /* - initgroups, setgid, setuid */
|
change_identity(pas); /* - initgroups, setgid, setuid */
|
||||||
if (chdir(pas->pw_dir) < 0) {
|
if (chdir_or_warn(pas->pw_dir) != 0) {
|
||||||
bb_error_msg("can't change directory to '%s'", pas->pw_dir);
|
|
||||||
xchdir(CRON_DIR);
|
xchdir(CRON_DIR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1667,8 +1667,7 @@ static void send_cgi_and_exit(
|
|||||||
script = last_slash;
|
script = last_slash;
|
||||||
if (script != url) { /* paranoia */
|
if (script != url) { /* paranoia */
|
||||||
*script = '\0';
|
*script = '\0';
|
||||||
if (chdir(url + 1) != 0) {
|
if (chdir_or_warn(url + 1) != 0) {
|
||||||
bb_perror_msg("can't change directory to '%s'", url + 1);
|
|
||||||
goto error_execing_cgi;
|
goto error_execing_cgi;
|
||||||
}
|
}
|
||||||
// not needed: *script = '/';
|
// not needed: *script = '/';
|
||||||
|
Loading…
Reference in New Issue
Block a user