OSDN Git Service

Enable OpenSSH Ask Password
authorFrank Li <lznuaa@gmail.com>
Thu, 19 Mar 2009 08:13:33 +0000 (16:13 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 19 Mar 2009 09:03:25 +0000 (17:03 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/Git.cpp

index f2168eb..cdc7c0c 100644 (file)
@@ -171,7 +171,9 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
 \r
        LPTSTR pEnv = l_processEnv;\r
        DWORD dwFlags = pEnv ? CREATE_UNICODE_ENVIRONMENT : 0;\r
-       dwFlags |= DETACHED_PROCESS;\r
+       \r
+       //DETACHED_PROCESS make ssh recognize that it has no console to launch askpass to input password. \r
+       dwFlags |= DETACHED_PROCESS; \r
 \r
        if(!CreateProcess(NULL,(LPWSTR)cmd.GetString(), NULL,NULL,TRUE,dwFlags,pEnv,(LPWSTR)m_CurrentDir.GetString(),&si,&pi))\r
        {\r
@@ -776,8 +778,17 @@ BOOL CGit::CheckMsysGitDir()
                }\r
        }\r
 \r
-       _tputenv_s(_T("DISPLAY"),_T(":9999"));\r
-       _tputenv_s(_T("SSH_ASKPASS"),_T("/C/Program Files/TortoiseGit/bin/TortoiseProc.exe"));\r
+       {\r
+               TCHAR sAskPass[MAX_PATH];\r
+               GetModuleFileName(NULL, sAskPass, _countof(sAskPass));\r
+               LPTSTR ptr = _tcsrchr(sAskPass, _T('\\'));\r
+               if (ptr) \r
+               {\r
+                       _tcscpy(ptr + 1, _T("SshAskPass.exe"));\r
+                       _tputenv_s(_T("DISPLAY"),_T(":9999"));\r
+                       _tputenv_s(_T("SSH_ASKPASS"),sAskPass);\r
+               }\r
+       }\r
        // search PATH if git/bin directory is alredy present\r
        if ( FindGitPath() )\r
        {\r