$ git diff libsemanage/src/genhomedircon.c diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c index 8782e2cb..d7b79c4c 100644 --- a/libsemanage/src/genhomedircon.c +++ b/libsemanage/src/genhomedircon.c @@ -354,24 +354,44 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s) path = semanage_findval(PATH_ETC_LOGIN_DEFS, "UID_MIN", NULL); if (path && *path) { - temp = atoi(path); - minuid = temp; - minuid_set = 1; + char *endptr; + const unsigned long val = strtoul(path, &endptr, 0); + if (endptr != path && *endptr == '\0') { + minuid = (uid_t)val; + minuid_set = 1; + } else { + /* we were provided an invalid value, use defaults. */ + minuid = 1000; + minuid_set = 1; + } } free(path); path = NULL; path = semanage_findval(PATH_ETC_LOGIN_DEFS, "UID_MAX", NULL); if (path && *path) { - temp = atoi(path); - maxuid = temp; + char *endptr; + const unsigned long val = strtoul(path, &endptr, 0); + if (endptr != path && *endptr == '\0') { + maxuid = (uid_t)val; + } else { + /* we were provided an invalid value, use defaults. */ + maxuid = 60000; + } } free(path); path = NULL; path = semanage_findval(PATH_ETC_LIBUSER, "LU_UIDNUMBER", "="); if (path && *path) { - temp = atoi(path); + char *endptr; + const unsigned long val = strtoul(path, &endptr, 0); + if (endptr != path && *endptr == '\0') { + temp = (uid_t)val; + } else { + /* we were provided an invalid value, use defaults. */ + temp = 500; + } if (!minuid_set || temp < minuid) { minuid = temp; minuid_set = 1;