return -1;
}
- memset(pw_name, 0, namelen);
- strncpy(pw_name, pw->pw_name, namelen - 1);
+ strlcpy(pw_name, pw->pw_name, namelen);
groups = data->idd_groups;
/* Allocate array of size maxgroups instead of handling two
*noperm = 0;
start = str;
while (1) {
- memset(name, 0, sizeof(name));
- end = strchr(start, ',');
- if (!end)
- end = str + strlen(str);
- if (start >= end)
- break;
- strncpy(name, start, end - start);
+ size_t len;
+ memset(name, 0, sizeof(name));
+ end = strchr(start, ',');
+ if (end == NULL)
+ end = str + strlen(str);
+ if (start >= end)
+ break;
+ len = end - start;
+ if (len >= sizeof(name))
+ return -E2BIG;
+ strncpy(name, start, len);
+ name[len] = '\0';
for (pt = perm_types; pt->name; pt++) {
if (!strcasecmp(name, pt->name)) {
*perm |= pt->bit;
return 0;
}
-int parse_perm_line(struct identity_downcall_data *data, char *line)
+static int
+parse_perm_line(struct identity_downcall_data *data, char *line, size_t size)
{
- char uid_str[256], nid_str[256], perm_str[256];
+ char uid_str[size];
+ char nid_str[size];
+ char perm_str[size];
lnet_nid_t nid;
__u32 perm, noperm;
int rc, i;
return -1;
}
- rc = sscanf(line, "%s %s %s", nid_str, uid_str, perm_str);
+ rc = sscanf(line, "%s %s %s", nid_str, uid_str, perm_str);
if (rc != 3) {
errlog("can't parse line %s\n", line);
return -1;
int get_perms(struct identity_downcall_data *data)
{
- FILE *fp;
- char line[1024];
+ FILE *fp;
+ char line[PATH_MAX];
fp = fopen(PERM_PATHNAME, "r");
if (fp == NULL) {
}
}
- while (fgets(line, 1024, fp)) {
+ while (fgets(line, sizeof(line), fp)) {
if (comment_line(line))
continue;
- if (parse_perm_line(data, line)) {
+ if (parse_perm_line(data, line, sizeof(line))) {
errlog("parse line %s failed!\n", line);
data->idd_err = EINVAL;
fclose(fp);