OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // windows.h must be first otherwise Win8 SDK breaks. | 5 // windows.h must be first otherwise Win8 SDK breaks. |
6 #include <windows.h> | 6 #include <windows.h> |
7 #include <LM.h> | 7 #include <LM.h> |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
8 #include <wincred.h> | 10 #include <wincred.h> |
9 | 11 |
10 // SECURITY_WIN32 must be defined in order to get | 12 // SECURITY_WIN32 must be defined in order to get |
11 // EXTENDED_NAME_FORMAT enumeration. | 13 // EXTENDED_NAME_FORMAT enumeration. |
12 #define SECURITY_WIN32 1 | 14 #define SECURITY_WIN32 1 |
13 #include <security.h> | 15 #include <security.h> |
14 #undef SECURITY_WIN32 | 16 #undef SECURITY_WIN32 |
15 | 17 |
16 #include "chrome/browser/password_manager/password_manager_util_win.h" | 18 #include "chrome/browser/password_manager/password_manager_util_win.h" |
17 | 19 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 CREDUI_FLAGS_KEEP_USERNAME | | 60 CREDUI_FLAGS_KEEP_USERNAME | |
59 CREDUI_FLAGS_ALWAYS_SHOW_UI | | 61 CREDUI_FLAGS_ALWAYS_SHOW_UI | |
60 CREDUI_FLAGS_DO_NOT_PERSIST; | 62 CREDUI_FLAGS_DO_NOT_PERSIST; |
61 | 63 |
62 struct PasswordCheckPrefs { | 64 struct PasswordCheckPrefs { |
63 PasswordCheckPrefs() : pref_last_changed_(0), blank_password_(false) {} | 65 PasswordCheckPrefs() : pref_last_changed_(0), blank_password_(false) {} |
64 | 66 |
65 void Read(PrefService* local_state); | 67 void Read(PrefService* local_state); |
66 void Write(PrefService* local_state); | 68 void Write(PrefService* local_state); |
67 | 69 |
68 int64 pref_last_changed_; | 70 int64_t pref_last_changed_; |
69 bool blank_password_; | 71 bool blank_password_; |
70 }; | 72 }; |
71 | 73 |
72 void PasswordCheckPrefs::Read(PrefService* local_state) { | 74 void PasswordCheckPrefs::Read(PrefService* local_state) { |
73 blank_password_ = | 75 blank_password_ = |
74 local_state->GetBoolean(password_manager::prefs::kOsPasswordBlank); | 76 local_state->GetBoolean(password_manager::prefs::kOsPasswordBlank); |
75 pref_last_changed_ = | 77 pref_last_changed_ = |
76 local_state->GetInt64(password_manager::prefs::kOsPasswordLastChanged); | 78 local_state->GetInt64(password_manager::prefs::kOsPasswordLastChanged); |
77 } | 79 } |
78 | 80 |
79 void PasswordCheckPrefs::Write(PrefService* local_state) { | 81 void PasswordCheckPrefs::Write(PrefService* local_state) { |
80 local_state->SetBoolean(password_manager::prefs::kOsPasswordBlank, | 82 local_state->SetBoolean(password_manager::prefs::kOsPasswordBlank, |
81 blank_password_); | 83 blank_password_); |
82 local_state->SetInt64(password_manager::prefs::kOsPasswordLastChanged, | 84 local_state->SetInt64(password_manager::prefs::kOsPasswordLastChanged, |
83 pref_last_changed_); | 85 pref_last_changed_); |
84 } | 86 } |
85 | 87 |
86 int64 GetPasswordLastChanged(const WCHAR* username) { | 88 int64_t GetPasswordLastChanged(const WCHAR* username) { |
87 LPUSER_INFO_1 user_info = NULL; | 89 LPUSER_INFO_1 user_info = NULL; |
88 DWORD age = 0; | 90 DWORD age = 0; |
89 | 91 |
90 NET_API_STATUS ret = NetUserGetInfo(NULL, username, 1, (LPBYTE*) &user_info); | 92 NET_API_STATUS ret = NetUserGetInfo(NULL, username, 1, (LPBYTE*) &user_info); |
91 | 93 |
92 if (ret == NERR_Success) { | 94 if (ret == NERR_Success) { |
93 // Returns seconds since last password change. | 95 // Returns seconds since last password change. |
94 age = user_info->usri1_password_age; | 96 age = user_info->usri1_password_age; |
95 NetApiBufferFree(user_info); | 97 NetApiBufferFree(user_info); |
96 } else { | 98 } else { |
97 return -1; | 99 return -1; |
98 } | 100 } |
99 | 101 |
100 base::Time changed = base::Time::Now() - base::TimeDelta::FromSeconds(age); | 102 base::Time changed = base::Time::Now() - base::TimeDelta::FromSeconds(age); |
101 | 103 |
102 return changed.ToInternalValue(); | 104 return changed.ToInternalValue(); |
103 } | 105 } |
104 | 106 |
105 bool CheckBlankPasswordWithPrefs(const WCHAR* username, | 107 bool CheckBlankPasswordWithPrefs(const WCHAR* username, |
106 PasswordCheckPrefs* prefs) { | 108 PasswordCheckPrefs* prefs) { |
107 int64 last_changed = GetPasswordLastChanged(username); | 109 int64_t last_changed = GetPasswordLastChanged(username); |
108 | 110 |
109 // If we cannot determine when the password was last changed | 111 // If we cannot determine when the password was last changed |
110 // then assume the password is not blank | 112 // then assume the password is not blank |
111 if (last_changed == -1) | 113 if (last_changed == -1) |
112 return false; | 114 return false; |
113 | 115 |
114 bool blank_password = prefs->blank_password_; | 116 bool blank_password = prefs->blank_password_; |
115 bool need_recheck = true; | 117 bool need_recheck = true; |
116 if (prefs->pref_last_changed_ > 0 && | 118 if (prefs->pref_last_changed_ > 0 && |
117 last_changed <= prefs->pref_last_changed_) { | 119 last_changed <= prefs->pref_last_changed_) { |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 } | 319 } |
318 } | 320 } |
319 SecureZeroMemory(password, sizeof(password)); | 321 SecureZeroMemory(password, sizeof(password)); |
320 } | 322 } |
321 } while (credErr == NO_ERROR && | 323 } while (credErr == NO_ERROR && |
322 (retval == false && tries < kMaxPasswordRetries)); | 324 (retval == false && tries < kMaxPasswordRetries)); |
323 return retval; | 325 return retval; |
324 } | 326 } |
325 | 327 |
326 } // namespace password_manager_util_win | 328 } // namespace password_manager_util_win |
OLD | NEW |