diff options
author | Guillem Jover <guillem@debian.org> | 2017-07-04 03:33:25 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2017-07-04 05:09:40 +0200 |
commit | 55c291c69bc9ee7c00731f4f5ffafd42673eb7d1 (patch) | |
tree | f3649be25081ecf0d606d82efcd74030a450e2d3 /utils/start-stop-daemon.c | |
parent | b8a9fefcfa67f7c93a526cfdb3c92943129f9d65 (diff) | |
download | dpkg-55c291c69bc9ee7c00731f4f5ffafd42673eb7d1.tar.gz |
s-s-d: Parse usernames and groupnames starting with digits correctly
We should not consider a username or groupname that starts with digits
as a valid uid or gid. When parsing integers we should parse the strings
fully and not consider any partial parsing to be correct.
Reported-by: Bodo Eggert <7eggert@online.de>
Diffstat (limited to 'utils/start-stop-daemon.c')
-rw-r--r-- | utils/start-stop-daemon.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/utils/start-stop-daemon.c b/utils/start-stop-daemon.c index 3931f5c79..813575044 100644 --- a/utils/start-stop-daemon.c +++ b/utils/start-stop-daemon.c @@ -1205,7 +1205,7 @@ setup_options(void) free(fullexecname); } - if (userspec && sscanf(userspec, "%d", &user_id) != 1) { + if (userspec && parse_unsigned(userspec, 10, &user_id) < 0) { struct passwd *pw; pw = getpwnam(userspec); @@ -1215,7 +1215,7 @@ setup_options(void) user_id = pw->pw_uid; } - if (changegroup && sscanf(changegroup, "%d", &runas_gid) != 1) { + if (changegroup && parse_unsigned(changegroup, 10, &runas_gid) < 0) { struct group *gr; gr = getgrnam(changegroup); @@ -1228,7 +1228,7 @@ setup_options(void) struct passwd *pw; struct stat st; - if (sscanf(changeuser, "%d", &runas_uid) == 1) + if (parse_unsigned(changeuser, 10, &runas_uid) == 0) pw = getpwuid(runas_uid); else pw = getpwnam(changeuser); |