o Move the call to rebuild_env() until after MODE_RESET_HOME is set.
Otherwise, the set_home option has no effect. o Fix use of freed memory when the "fqdn" flag is set. This was introduced by the fix for the "segv when gethostbynam() fails" bug. Also, we no longer call set_fqdn() if the "fqdn" flag is not set so there is no need to check the "fqdn" flag in set_fqdn() itself.
This commit is contained in:
24
sudo.c
24
sudo.c
@@ -287,9 +287,6 @@ main(argc, argv, envp)
|
|||||||
log_error(NO_MAIL|MSG_ONLY, "no passwd entry for %s!", *user_runas);
|
log_error(NO_MAIL|MSG_ONLY, "no passwd entry for %s!", *user_runas);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build up custom environment that avoids any nasty bits. */
|
|
||||||
new_environ = rebuild_env(sudo_mode, envp);
|
|
||||||
|
|
||||||
/* This goes after the sudoers parse since we honor sudoers options. */
|
/* This goes after the sudoers parse since we honor sudoers options. */
|
||||||
if (sudo_mode == MODE_KILL || sudo_mode == MODE_INVALIDATE) {
|
if (sudo_mode == MODE_KILL || sudo_mode == MODE_INVALIDATE) {
|
||||||
remove_timestamp((sudo_mode == MODE_KILL));
|
remove_timestamp((sudo_mode == MODE_KILL));
|
||||||
@@ -335,6 +332,9 @@ main(argc, argv, envp)
|
|||||||
if (!(validated & FLAG_NOPASS))
|
if (!(validated & FLAG_NOPASS))
|
||||||
check_user();
|
check_user();
|
||||||
|
|
||||||
|
/* Build up custom environment that avoids any nasty bits. */
|
||||||
|
new_environ = rebuild_env(sudo_mode, envp);
|
||||||
|
|
||||||
if (validated & VALIDATE_OK) {
|
if (validated & VALIDATE_OK) {
|
||||||
/* Finally tell the user if the command did not exist. */
|
/* Finally tell the user if the command did not exist. */
|
||||||
if (cmnd_status == NOT_FOUND_DOT) {
|
if (cmnd_status == NOT_FOUND_DOT) {
|
||||||
@@ -950,17 +950,15 @@ set_fqdn()
|
|||||||
struct hostent *hp;
|
struct hostent *hp;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if (def_flag(I_FQDN)) {
|
if (!(hp = gethostbyname(user_host))) {
|
||||||
if (!(hp = gethostbyname(user_host))) {
|
log_error(MSG_ONLY|NO_EXIT,
|
||||||
log_error(MSG_ONLY|NO_EXIT,
|
"unable to lookup %s via gethostbyname()", user_host);
|
||||||
"unable to lookup %s via gethostbyname()", user_host);
|
} else {
|
||||||
} else {
|
if (user_shost != user_host)
|
||||||
free(user_host);
|
free(user_shost);
|
||||||
user_host = estrdup(hp->h_name);
|
free(user_host);
|
||||||
}
|
user_host = estrdup(hp->h_name);
|
||||||
}
|
}
|
||||||
if (user_shost != user_host)
|
|
||||||
free(user_shost);
|
|
||||||
if ((p = strchr(user_host, '.'))) {
|
if ((p = strchr(user_host, '.'))) {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
user_shost = estrdup(user_host);
|
user_shost = estrdup(user_host);
|
||||||
|
Reference in New Issue
Block a user