Fix #71; Env vars like APPDATA, LOCALAPPDATA etc in sshd are set correctly now.
APPDATA, LOCALAPPDATA, HOMEDRIVE, HOMEPATH set correctly in sshd server
This commit is contained in:
parent
44d8ddddb1
commit
802d9a3349
|
@ -129,6 +129,7 @@ int GetDomainFromToken ( HANDLE *hAccessToken, UCHAR *domain, DWORD dwSize)
|
||||||
char *GetHomeDirFromToken(char *userName, HANDLE token)
|
char *GetHomeDirFromToken(char *userName, HANDLE token)
|
||||||
{
|
{
|
||||||
UCHAR domain[200];
|
UCHAR domain[200];
|
||||||
|
wchar_t pw_buf[MAX_PATH] = { L'\0' };
|
||||||
|
|
||||||
debug("-> GetHomeDirFromToken()...");
|
debug("-> GetHomeDirFromToken()...");
|
||||||
|
|
||||||
|
@ -172,7 +173,19 @@ char *GetHomeDirFromToken(char *userName, HANDLE token)
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update APPDATA user's env variable
|
||||||
|
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_APPDATA, token, 0, pw_buf)))
|
||||||
|
{
|
||||||
|
SetEnvironmentVariableW(L"APPDATA", pw_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// update LOCALAPPDATA user's env variable
|
||||||
|
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, token, 0, pw_buf)))
|
||||||
|
{
|
||||||
|
SetEnvironmentVariableW(L"LOCALAPPDATA", pw_buf);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unload user profile.
|
* Unload user profile.
|
||||||
*/
|
*/
|
||||||
|
|
26
session.c
26
session.c
|
@ -804,25 +804,25 @@ do_exec_no_pty(Session *s, const char *command)
|
||||||
* Get user homedir if needed.
|
* Get user homedir if needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (s -> pw -> pw_dir == NULL || s -> pw -> pw_dir[0] == '\0')
|
if (1) // (s -> pw -> pw_dir == NULL || s -> pw -> pw_dir[0] == '\0')
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If there is homedir from LSA use it.
|
* If there is homedir from LSA use it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (HomeDirLsaW[0] != '\0')
|
//if (HomeDirLsaW[0] != '\0')
|
||||||
{
|
//{
|
||||||
s -> pw -> pw_dir = HomeDirLsaW;
|
//s -> pw -> pw_dir = HomeDirLsaW;
|
||||||
}
|
//}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If not get homedir from token.
|
* If not get homedir from token.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
s -> pw -> pw_dir = GetHomeDirFromToken(s -> pw -> pw_name, hToken);
|
s -> pw -> pw_dir = GetHomeDirFromToken(s -> pw -> pw_name, hToken);
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -832,6 +832,16 @@ do_exec_no_pty(Session *s, const char *command)
|
||||||
_wchdir(s -> pw -> pw_dir);
|
_wchdir(s -> pw -> pw_dir);
|
||||||
|
|
||||||
SetEnvironmentVariableW(L"HOME", s -> pw -> pw_dir);
|
SetEnvironmentVariableW(L"HOME", s -> pw -> pw_dir);
|
||||||
|
wchar_t *wstr, wchr;
|
||||||
|
wstr = wcschr(s->pw->pw_dir, ':');
|
||||||
|
if (wstr) {
|
||||||
|
wchr = *(wstr + 1);
|
||||||
|
*(wstr + 1) = '\0';
|
||||||
|
SetEnvironmentVariableW(L"HOMEDRIVE", s->pw->pw_dir);
|
||||||
|
*(wstr + 1) = wchr;
|
||||||
|
SetEnvironmentVariableW(L"HOMEPATH", (wstr+1));
|
||||||
|
}
|
||||||
|
|
||||||
SetEnvironmentVariableW(L"USERPROFILE", s -> pw -> pw_dir);
|
SetEnvironmentVariableW(L"USERPROFILE", s -> pw -> pw_dir);
|
||||||
|
|
||||||
// find the server name of the domain controller which created this token
|
// find the server name of the domain controller which created this token
|
||||||
|
|
Loading…
Reference in New Issue