Don't use emalloc() in fmt_string(); we want to be able to use it from
a plugin.
This commit is contained in:
@@ -51,13 +51,15 @@ fmt_string(const char *var, const char *val)
|
|||||||
size_t val_len = strlen(val);
|
size_t val_len = strlen(val);
|
||||||
char *cp, *str;
|
char *cp, *str;
|
||||||
|
|
||||||
cp = str = emalloc(var_len + 1 + val_len + 1);
|
cp = str = malloc(var_len + 1 + val_len + 1);
|
||||||
memcpy(cp, var, var_len);
|
if (str != NULL) {
|
||||||
cp += var_len;
|
memcpy(cp, var, var_len);
|
||||||
*cp++ = '=';
|
cp += var_len;
|
||||||
memcpy(cp, val, val_len);
|
*cp++ = '=';
|
||||||
cp += val_len;
|
memcpy(cp, val, val_len);
|
||||||
*cp = '\0';
|
cp += val_len;
|
||||||
|
*cp = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
return(str);
|
return(str);
|
||||||
}
|
}
|
||||||
|
@@ -359,8 +359,11 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, char ***settingsp,
|
|||||||
if (sudo_settings[i].value) {
|
if (sudo_settings[i].value) {
|
||||||
sudo_debug(9, "settings: %s=%s", sudo_settings[i].name,
|
sudo_debug(9, "settings: %s=%s", sudo_settings[i].name,
|
||||||
sudo_settings[i].value);
|
sudo_settings[i].value);
|
||||||
settings[j++] = fmt_string(sudo_settings[i].name,
|
settings[j] = fmt_string(sudo_settings[i].name,
|
||||||
sudo_settings[i].value);
|
sudo_settings[i].value);
|
||||||
|
if (settings[j] == NULL)
|
||||||
|
errorx(1, "unable to allocate memory");
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settings[j] = NULL;
|
settings[j] = NULL;
|
||||||
|
@@ -328,6 +328,8 @@ get_user_info(struct user_details *ud)
|
|||||||
errorx(1, "unknown uid %lu: who are you?", (unsigned long)ud->uid);
|
errorx(1, "unknown uid %lu: who are you?", (unsigned long)ud->uid);
|
||||||
|
|
||||||
user_info[i] = fmt_string("user", pw->pw_name);
|
user_info[i] = fmt_string("user", pw->pw_name);
|
||||||
|
if (user_info[i] == NULL)
|
||||||
|
errorx(1, "unable to allocate memory");
|
||||||
ud->username = user_info[i] + sizeof("user=") - 1;
|
ud->username = user_info[i] + sizeof("user=") - 1;
|
||||||
|
|
||||||
easprintf(&user_info[++i], "uid=%lu", (unsigned long)ud->uid);
|
easprintf(&user_info[++i], "uid=%lu", (unsigned long)ud->uid);
|
||||||
@@ -340,12 +342,16 @@ get_user_info(struct user_details *ud)
|
|||||||
|
|
||||||
if (getcwd(cwd, sizeof(cwd)) != NULL) {
|
if (getcwd(cwd, sizeof(cwd)) != NULL) {
|
||||||
user_info[++i] = fmt_string("cwd", cwd);
|
user_info[++i] = fmt_string("cwd", cwd);
|
||||||
|
if (user_info[i] == NULL)
|
||||||
|
errorx(1, "unable to allocate memory");
|
||||||
ud->cwd = user_info[i] + sizeof("cwd=") - 1;
|
ud->cwd = user_info[i] + sizeof("cwd=") - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cp = ttyname(STDIN_FILENO)) || (cp = ttyname(STDOUT_FILENO)) ||
|
if ((cp = ttyname(STDIN_FILENO)) || (cp = ttyname(STDOUT_FILENO)) ||
|
||||||
(cp = ttyname(STDERR_FILENO))) {
|
(cp = ttyname(STDERR_FILENO))) {
|
||||||
user_info[++i] = fmt_string("tty", cp);
|
user_info[++i] = fmt_string("tty", cp);
|
||||||
|
if (user_info[i] == NULL)
|
||||||
|
errorx(1, "unable to allocate memory");
|
||||||
ud->tty = user_info[i] + sizeof("tty=") - 1;
|
ud->tty = user_info[i] + sizeof("tty=") - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,6 +360,8 @@ get_user_info(struct user_details *ud)
|
|||||||
else
|
else
|
||||||
strlcpy(host, "localhost", sizeof(host));
|
strlcpy(host, "localhost", sizeof(host));
|
||||||
user_info[++i] = fmt_string("host", host);
|
user_info[++i] = fmt_string("host", host);
|
||||||
|
if (user_info[i] == NULL)
|
||||||
|
errorx(1, "unable to allocate memory");
|
||||||
ud->host = user_info[i] + sizeof("host=") - 1;
|
ud->host = user_info[i] + sizeof("host=") - 1;
|
||||||
|
|
||||||
user_info[++i] = NULL;
|
user_info[++i] = NULL;
|
||||||
|
Reference in New Issue
Block a user