ptr = s = strdup(line.c_str());
value = strsep(&ptr, "\t");
for (i = 0; i < keys.size() && value; i++) {
- if (value[0] != '\0')
- values[keys[i]] = std::string(value);
+ if (value[0] != '\0') {
+ // exact types required for UID/GID
+ if (keys[i] == "uid") {
+ values[keys[i]] = (uid_t)atoi(value);
+ } else if (keys[i] == "gid") {
+ values[keys[i]] = (gid_t)atoi(value);
+ } else {
+ values[keys[i]] = std::string(value);
+ }
+ }
value = strsep(&ptr, "\t");
}
free(s);