diff options
author | Martin Schwenke <martin@meltin.net> | 2020-06-05 22:05:42 +1000 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2020-07-06 09:50:31 +0000 |
commit | 8cffe254eda6c7ae843d79610eacb9a1020ef01a (patch) | |
tree | 2d7eaebba20188e3496fd2f8f11e5a634fc7695f /lib | |
parent | 6e263432eefe0709738799242ff50ca759ce7ada (diff) | |
download | samba-8cffe254eda6c7ae843d79610eacb9a1020ef01a.tar.gz |
util: Reallocate larger buffer if getpwuid_r() returns ERANGE
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Bjoern Jacke <bjacke@samba.org>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Tue Jun 9 21:07:24 UTC 2020 on sn-devel-184
(cherry picked from commit ddac6b2eb4adaec8fc5e25ca07387d2b9417764c)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/util/util_paths.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/util/util_paths.c b/lib/util/util_paths.c index 9bc6df37e5d..72cc0aab8de 100644 --- a/lib/util/util_paths.c +++ b/lib/util/util_paths.c @@ -86,6 +86,19 @@ static char *get_user_home_dir(TALLOC_CTX *mem_ctx) } rc = getpwuid_r(getuid(), &pwd, buf, len, &pwdbuf); + while (rc == ERANGE) { + size_t newlen = 2 * len; + if (newlen < len) { + /* Overflow */ + goto done; + } + len = newlen; + buf = talloc_realloc_size(mem_ctx, buf, len); + if (buf == NULL) { + goto done; + } + rc = getpwuid_r(getuid(), &pwd, buf, len, &pwdbuf); + } if (rc != 0 || pwdbuf == NULL ) { const char *szPath = getenv("HOME"); if (szPath == NULL) { |