Support ~USER for some names on MS-Windows
* src/w32.c (getpwnam): Support usernames provided through LOGNAME or USERNAME environment variables, to mimic what editfns.c:init_editfns does.
This commit is contained in:
parent
c3f87efe3a
commit
4d00262a8e
1 changed files with 23 additions and 1 deletions
24
src/w32.c
24
src/w32.c
|
@ -2091,7 +2091,29 @@ getpwnam (char *name)
|
|||
return pw;
|
||||
|
||||
if (xstrcasecmp (name, pw->pw_name))
|
||||
return NULL;
|
||||
{
|
||||
/* Mimic what init_editfns does with these environment
|
||||
variables, so that the likes of ~USER is recognized by
|
||||
expand-file-name even if $LOGNAME gives a name different from
|
||||
the real username produced by the process token. */
|
||||
char *logname = getenv ("LOGNAME");
|
||||
char *username = getenv ("USERNAME");
|
||||
if ((logname || username)
|
||||
&& xstrcasecmp (name, logname ? logname : username) == 0)
|
||||
{
|
||||
static struct passwd alias_user;
|
||||
static char alias_name[PASSWD_FIELD_SIZE];
|
||||
|
||||
memcpy (&alias_user, &dflt_passwd, sizeof dflt_passwd);
|
||||
alias_name[0] = '\0';
|
||||
strncat (alias_name, logname ? logname : username,
|
||||
PASSWD_FIELD_SIZE - 1);
|
||||
alias_user.pw_name = alias_name;
|
||||
pw = &alias_user;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pw;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue