char username[20];
char fullname[31];
...
/* Strip SSID */
if (local) {
pw = getpwuid(getuid());
} else {
strcpy(callsign, call);
strcpy(username, callsign);
strlwr(username);
p = strchr(username, '-');
if (p) *p = '\0';
pw = getpwnam(username);
}
...
if (local) {
strcpy(username, pw->pw_name);
strcpy(callsign, username);
}
/* Strip full name from the gecos field... */
if (strchr(pw->pw_gecos, ',') == NULL)
strcpy(fullname, pw->pw_gecos);
else
strcpy(fullname, strtok(pw->pw_gecos, ","));
This seems to be a common legacy code bug - assumptions about username/gecos lengths etc.