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) 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.
*/ */

View File

@ -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