diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2022-01-13 12:56:10 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2022-01-13 12:56:10 +0100 |
| commit | c2788f88f430da8ae5fb5f293b13fc2b167ea2fe (patch) | |
| tree | 44e3fd94292a3ef13ecdbf14d469459e00be1150 | |
| parent | 931c55f9e2b41473132683488820c6fb7c47506b (diff) | |
| download | busybox-w32-c2788f88f430da8ae5fb5f293b13fc2b167ea2fe.tar.gz busybox-w32-c2788f88f430da8ae5fb5f293b13fc2b167ea2fe.tar.bz2 busybox-w32-c2788f88f430da8ae5fb5f293b13fc2b167ea2fe.zip | |
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>
| -rw-r--r-- | include/libbb.h | 1 | ||||
| -rw-r--r-- | libbb/setup_environment.c | 3 | ||||
| -rw-r--r-- | libbb/xfuncs_printf.c | 11 | ||||
| -rw-r--r-- | miscutils/crond.c | 3 | ||||
| -rw-r--r-- | networking/httpd.c | 3 |
5 files changed, 13 insertions, 8 deletions
diff --git a/include/libbb.h b/include/libbb.h index 780e9ae7d..91b456915 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
| @@ -645,6 +645,7 @@ void xsetgid(gid_t gid) FAST_FUNC; | |||
| 645 | void xsetuid(uid_t uid) FAST_FUNC; | 645 | void xsetuid(uid_t uid) FAST_FUNC; |
| 646 | void xsetegid(gid_t egid) FAST_FUNC; | 646 | void xsetegid(gid_t egid) FAST_FUNC; |
| 647 | void xseteuid(uid_t euid) FAST_FUNC; | 647 | void xseteuid(uid_t euid) FAST_FUNC; |
| 648 | int chdir_or_warn(const char *path) FAST_FUNC; | ||
| 648 | void xchdir(const char *path) FAST_FUNC; | 649 | void xchdir(const char *path) FAST_FUNC; |
| 649 | void xfchdir(int fd) FAST_FUNC; | 650 | void xfchdir(int fd) FAST_FUNC; |
| 650 | void xchroot(const char *path) FAST_FUNC; | 651 | void xchroot(const char *path) FAST_FUNC; |
diff --git a/libbb/setup_environment.c b/libbb/setup_environment.c index 37777204e..3549e2099 100644 --- a/libbb/setup_environment.c +++ b/libbb/setup_environment.c | |||
| @@ -37,8 +37,7 @@ void FAST_FUNC setup_environment(const char *shell, int flags, const struct pass | |||
| 37 | /* Change the current working directory to be the home directory | 37 | /* Change the current working directory to be the home directory |
| 38 | * of the user */ | 38 | * of the user */ |
| 39 | if (flags & SETUP_ENV_CHDIR) { | 39 | if (flags & SETUP_ENV_CHDIR) { |
| 40 | if (chdir(pw->pw_dir) != 0) { | 40 | if (chdir_or_warn(pw->pw_dir) != 0) { |
| 41 | bb_error_msg("can't change directory to '%s'", pw->pw_dir); | ||
| 42 | xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/"); | 41 | xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/"); |
| 43 | } | 42 | } |
| 44 | } | 43 | } |
diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index fc630d176..842d10cd2 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c | |||
| @@ -415,11 +415,18 @@ void FAST_FUNC xseteuid(uid_t euid) | |||
| 415 | if (seteuid(euid)) bb_simple_perror_msg_and_die("seteuid"); | 415 | if (seteuid(euid)) bb_simple_perror_msg_and_die("seteuid"); |
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | int FAST_FUNC chdir_or_warn(const char *path) | ||
| 419 | { | ||
| 420 | int r = chdir(path); | ||
| 421 | if (r != 0) | ||
| 422 | bb_perror_msg("can't change directory to '%s'", path); | ||
| 423 | return r; | ||
| 424 | } | ||
| 418 | // Die if we can't chdir to a new path. | 425 | // Die if we can't chdir to a new path. |
| 419 | void FAST_FUNC xchdir(const char *path) | 426 | void FAST_FUNC xchdir(const char *path) |
| 420 | { | 427 | { |
| 421 | if (chdir(path)) | 428 | if (chdir_or_warn(path) != 0) |
| 422 | bb_perror_msg_and_die("can't change directory to '%s'", path); | 429 | xfunc_die(); |
| 423 | } | 430 | } |
| 424 | 431 | ||
| 425 | void FAST_FUNC xfchdir(int fd) | 432 | void FAST_FUNC xfchdir(int fd) |
diff --git a/miscutils/crond.c b/miscutils/crond.c index b74427351..1965af656 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c | |||
| @@ -675,8 +675,7 @@ static void change_user(struct passwd *pas) | |||
| 675 | { | 675 | { |
| 676 | /* careful: we're after vfork! */ | 676 | /* careful: we're after vfork! */ |
| 677 | change_identity(pas); /* - initgroups, setgid, setuid */ | 677 | change_identity(pas); /* - initgroups, setgid, setuid */ |
| 678 | if (chdir(pas->pw_dir) < 0) { | 678 | if (chdir_or_warn(pas->pw_dir) != 0) { |
| 679 | bb_error_msg("can't change directory to '%s'", pas->pw_dir); | ||
| 680 | xchdir(CRON_DIR); | 679 | xchdir(CRON_DIR); |
| 681 | } | 680 | } |
| 682 | } | 681 | } |
diff --git a/networking/httpd.c b/networking/httpd.c index 33045163f..ffc58e10b 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
| @@ -1667,8 +1667,7 @@ static void send_cgi_and_exit( | |||
| 1667 | script = last_slash; | 1667 | script = last_slash; |
| 1668 | if (script != url) { /* paranoia */ | 1668 | if (script != url) { /* paranoia */ |
| 1669 | *script = '\0'; | 1669 | *script = '\0'; |
| 1670 | if (chdir(url + 1) != 0) { | 1670 | if (chdir_or_warn(url + 1) != 0) { |
| 1671 | bb_perror_msg("can't change directory to '%s'", url + 1); | ||
| 1672 | goto error_execing_cgi; | 1671 | goto error_execing_cgi; |
| 1673 | } | 1672 | } |
| 1674 | // not needed: *script = '/'; | 1673 | // not needed: *script = '/'; |
