Amend truncation fix, the real problem was the size passed to snprintf().

sudo_rcstr_alloc() takes a length (not a size) parameter so when
calling snprintf() we need to add one to the length.
This commit is contained in:
Todd C. Miller
2021-09-21 19:01:22 -06:00
parent e23874d0fa
commit 0f2252f898

View File

@@ -478,10 +478,10 @@ sudo_ldap_role_to_priv(const char *cn, void *hosts, void *runasusers,
if (store_options) { if (store_options) {
/* Use sudoRole in place of file name in defaults. */ /* Use sudoRole in place of file name in defaults. */
size_t slen = sizeof("sudoRole ") + strlen(priv->ldap_role); size_t slen = sizeof("sudoRole ") - 1 + strlen(priv->ldap_role);
if ((source = sudo_rcstr_alloc(slen)) == NULL) if ((source = sudo_rcstr_alloc(slen)) == NULL)
goto oom; goto oom;
if ((size_t)snprintf(source, slen, "sudoRole %s", priv->ldap_role) >= slen) { if ((size_t)snprintf(source, slen + 1, "sudoRole %s", priv->ldap_role) != slen) {
sudo_warnx(U_("internal error, %s overflow"), __func__); sudo_warnx(U_("internal error, %s overflow"), __func__);
goto bad; goto bad;
} }