Skip to content

Commit

Permalink
Use GECOS field a bit better to produce default human readable name.
Browse files Browse the repository at this point in the history
This updates the default human readable name we generate from GECOS
field.  We assume the "full-name, followed by additional information
separated by commas" format, with an & expanding to the capitalized
login name.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Sep 20, 2005
1 parent f318dd2 commit e9bacb4
Showing 1 changed file with 35 additions and 4 deletions.
39 changes: 35 additions & 4 deletions ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,40 @@ static char real_email[1000];
static char real_name[1000];
static char real_date[50];

static void copy_gecos(struct passwd *w, char *name, int sz)
{
char *src, *dst;
int len, nlen;

nlen = strlen(w->pw_name);

/* Traditionally GECOS field had office phone numbers etc, separated
* with commas. Also & stands for capitalized form of the login name.
*/

for (len = 0, dst = name, src = w->pw_gecos; len < sz; src++) {
int ch = *src;
if (ch != '&') {
*dst++ = ch;
if (ch == 0 || ch == ',')
break;
len++;
continue;
}
if (len + nlen < sz) {
/* Sorry, Mr. McDonald... */
*dst++ = toupper(*w->pw_name);
memcpy(dst, w->pw_name + 1, nlen - 1);
dst += nlen - 1;
}
}
if (len < sz)
name[len] = 0;
else
die("Your parents must have hated you!");

}

int setup_ident(void)
{
int len;
Expand All @@ -24,10 +58,7 @@ int setup_ident(void)
die("You don't exist. Go away!");

/* Get the name ("gecos") */
len = strlen(pw->pw_gecos);
if (len >= sizeof(real_name))
die("Your parents must have hated you!");
memcpy(real_name, pw->pw_gecos, len+1);
copy_gecos(pw, real_name, sizeof(real_name));

/* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
len = strlen(pw->pw_name);
Expand Down

0 comments on commit e9bacb4

Please sign in to comment.