summaryrefslogtreecommitdiff
path: root/utils/start-stop-daemon.c
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2017-07-04 03:33:25 +0200
committerGuillem Jover <guillem@debian.org>2017-07-04 05:09:40 +0200
commit55c291c69bc9ee7c00731f4f5ffafd42673eb7d1 (patch)
treef3649be25081ecf0d606d82efcd74030a450e2d3 /utils/start-stop-daemon.c
parentb8a9fefcfa67f7c93a526cfdb3c92943129f9d65 (diff)
downloaddpkg-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.c6
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);