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:
quamrulmina 2016-01-27 18:20:11 -06:00
parent 44d8ddddb1
commit 802d9a3349
2 changed files with 32 additions and 9 deletions

View File

@ -129,6 +129,7 @@ int GetDomainFromToken ( HANDLE *hAccessToken, UCHAR *domain, DWORD dwSize)
char *GetHomeDirFromToken(char *userName, HANDLE token)
{
UCHAR domain[200];
wchar_t pw_buf[MAX_PATH] = { L'\0' };
debug("-> GetHomeDirFromToken()...");
@ -172,7 +173,19 @@ char *GetHomeDirFromToken(char *userName, HANDLE token)
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.
*/

View File

@ -804,25 +804,25 @@ do_exec_no_pty(Session *s, const char *command)
* 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 (HomeDirLsaW[0] != '\0')
{
s -> pw -> pw_dir = HomeDirLsaW;
}
//if (HomeDirLsaW[0] != '\0')
//{
//s -> pw -> pw_dir = HomeDirLsaW;
//}
/*
* If not get homedir from token.
*/
else
{
//else
//{
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);
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);
// find the server name of the domain controller which created this token