1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2016 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "WindowsCredentialsStore.h"
24 #pragma comment(lib, "Advapi32.lib")
26 int CWindowsCredentialsStore::GetCredential(const CString
& entryName
, CString
& username
, CString
& password
)
28 PCREDENTIAL cred
= nullptr;
29 if (CredRead(entryName
, 1, 0, &cred
) != TRUE
|| !cred
)
32 username
= cred
->UserName
;
33 password
= CString((TCHAR
*)cred
->CredentialBlob
, cred
->CredentialBlobSize
/ sizeof(TCHAR
));
37 int CWindowsCredentialsStore::SaveCredential(const CString
& entryName
, const CString
& username
, const CString
& password
)
39 CREDENTIAL cred
= { 0 };
40 cred
.Type
= CRED_TYPE_GENERIC
;
41 cred
.TargetName
= const_cast<LPTSTR
>(static_cast<LPCTSTR
>(entryName
));
42 cred
.UserName
= const_cast<LPTSTR
>(static_cast<LPCTSTR
>(username
));
43 cred
.CredentialBlob
= (LPBYTE
)static_cast<LPCTSTR
>(password
);
44 cred
.CredentialBlobSize
= password
.GetLength() * sizeof(TCHAR
);
45 cred
.Persist
= CRED_PERSIST_LOCAL_MACHINE
;
46 return CredWrite(&cred
, 0) == TRUE
? 0 : -1;
49 int CWindowsCredentialsStore::DeleteCredential(const CString
& entryName
)
51 return CredDelete(entryName
, CRED_TYPE_GENERIC
, 0) == TRUE
? 0 : -1;