From 087908c140f00164dc70e8b323c89dbd47929da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 31 Jul 2020 11:57:03 +0200 Subject: [PATCH] nspawn: use extract_first_word() --- src/nspawn/nspawn-setuid.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/nspawn/nspawn-setuid.c b/src/nspawn/nspawn-setuid.c index d0e575fef2..fa2002d578 100644 --- a/src/nspawn/nspawn-setuid.c +++ b/src/nspawn/nspawn-setuid.c @@ -88,13 +88,12 @@ int change_uid_gid_raw( int change_uid_gid(const char *user, char **_home) { char *x, *u, *g, *h; - const char *word, *state; _cleanup_free_ gid_t *gids = NULL; _cleanup_free_ char *home = NULL, *line = NULL; _cleanup_fclose_ FILE *f = NULL; _cleanup_close_ int fd = -1; unsigned n_gids = 0; - size_t sz = 0, l; + size_t sz = 0; uid_t uid; gid_t gid; pid_t pid; @@ -208,16 +207,19 @@ int change_uid_gid(const char *user, char **_home) { x += strcspn(x, WHITESPACE); x += strspn(x, WHITESPACE); - FOREACH_WORD(word, l, x, state) { - char c[l+1]; + for (const char *p = x;;) { + _cleanup_free_ char *word = NULL; - memcpy(c, word, l); - c[l] = 0; + r = extract_first_word(&p, &word, NULL, 0); + if (r < 0) + return log_error_errno(r, "Failed to parse group data from getent: %m"); + if (r == 0) + break; if (!GREEDY_REALLOC(gids, sz, n_gids+1)) return log_oom(); - r = parse_gid(c, &gids[n_gids++]); + r = parse_gid(word, &gids[n_gids++]); if (r < 0) return log_error_errno(r, "Failed to parse group data from getent: %m"); }