}
/* GROUPS */
- snprintf(unsigned_str, sizeof(unsigned_str), "%u", id->ngroups);
- setenv("UID_WRAPPER_INITIAL_GROUPS_COUNT", unsigned_str, 1);
-
for (i = 0; i < id->ngroups; i++) {
size_t groups_str_len = strlen(groups_str);
- size_t groups_str_avail = groups_str_size - groups_str_len;
+ size_t groups_str_avail = groups_str_size - groups_str_len - 1;
int len;
len = snprintf(unsigned_str, sizeof(unsigned_str), ",%u", id->groups[i]);
if (len <= 1) {
- continue;
+ UWRAP_LOG(UWRAP_LOG_ERROR,
+ "snprintf failed for groups[%d]=%u",
+ i,
+ id->groups[i]);
+ break;
+ }
+ if (((size_t)len) >= groups_str_avail) {
+ UWRAP_LOG(UWRAP_LOG_ERROR,
+ "groups env string is to small for %d groups",
+ i);
+ break;
}
- if (((size_t)len) < groups_str_avail) {
- snprintf(groups_str + groups_str_len,
- groups_str_size - groups_str_len,
- "%s",
- i == 0 ? unsigned_str + 1 : unsigned_str);
+
+ len = snprintf(groups_str + groups_str_len,
+ groups_str_size - groups_str_len,
+ "%s",
+ i == 0 ? unsigned_str + 1 : unsigned_str);
+ if (len < 1) {
+ UWRAP_LOG(UWRAP_LOG_ERROR,
+ "snprintf failed to create groups string at groups[%d]=%u",
+ i,
+ id->groups[i]);
+ break;
}
}
- if (id->ngroups > 0) {
+ if (id->ngroups == i) {
setenv("UID_WRAPPER_INITIAL_GROUPS", groups_str, 1);
+
+ snprintf(unsigned_str, sizeof(unsigned_str), "%u", id->ngroups);
+ setenv("UID_WRAPPER_INITIAL_GROUPS_COUNT", unsigned_str, 1);
}
}