| 64 const char *password; |
64 const char *password; |
| 65 GError *error; |
65 GError *error; |
| 66 |
66 |
| 67 ACTIVATE(); |
67 ACTIVATE(); |
| 68 |
68 |
| 69 purple_debug_misc("keyring-internal", |
|
| 70 "Reading password for account %s (%s).\n", |
|
| 71 purple_account_get_username(account), |
|
| 72 purple_account_get_protocol_id(account)); |
|
| 73 |
|
| 74 password = g_hash_table_lookup(internal_keyring_passwords, account); |
69 password = g_hash_table_lookup(internal_keyring_passwords, account); |
| 75 |
70 |
| 76 if (password != NULL) { |
71 if (password != NULL) { |
| |
72 purple_debug_misc("keyring-internal", |
| |
73 "Got password for account %s (%s).\n", |
| |
74 purple_account_get_username(account), |
| |
75 purple_account_get_protocol_id(account)); |
| 77 if (cb != NULL) |
76 if (cb != NULL) |
| 78 cb(account, password, NULL, data); |
77 cb(account, password, NULL, data); |
| 79 } else { |
78 } else { |
| |
79 purple_debug_misc("keyring-internal", |
| |
80 "No password for account %s (%s).\n", |
| |
81 purple_account_get_username(account), |
| |
82 purple_account_get_protocol_id(account)); |
| 80 error = g_error_new(PURPLE_KEYRING_ERROR, |
83 error = g_error_new(PURPLE_KEYRING_ERROR, |
| 81 PURPLE_KEYRING_ERROR_NOPASSWD, "Password not found."); |
84 PURPLE_KEYRING_ERROR_NOPASSWD, "Password not found."); |
| 82 if (cb != NULL) |
85 if (cb != NULL) |
| 83 cb(account, NULL, error, data); |
86 cb(account, NULL, error, data); |
| 84 g_error_free(error); |
87 g_error_free(error); |
| 91 PurpleKeyringSaveCallback cb, |
94 PurpleKeyringSaveCallback cb, |
| 92 gpointer data) |
95 gpointer data) |
| 93 { |
96 { |
| 94 ACTIVATE(); |
97 ACTIVATE(); |
| 95 |
98 |
| 96 if (password == NULL || *password == '\0') { |
99 if (password[0] == '\0') |
| |
100 password = NULL; |
| |
101 |
| |
102 if (password == NULL) |
| 97 g_hash_table_remove(internal_keyring_passwords, account); |
103 g_hash_table_remove(internal_keyring_passwords, account); |
| 98 purple_debug_info("keyring-internal", |
104 else |
| 99 "Deleted password for account %s (%s).\n", |
|
| 100 purple_account_get_username(account), |
|
| 101 purple_account_get_protocol_id(account)); |
|
| 102 } else { |
|
| 103 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(password)); |
105 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(password)); |
| 104 purple_debug_info("keyring-internal", |
106 |
| 105 "Updated password for account %s (%s).\n", |
107 purple_debug_misc("keyring-internal", |
| 106 purple_account_get_username(account), |
108 "Password %s for account %s (%s).\n", |
| 107 purple_account_get_protocol_id(account)); |
109 (password == NULL ? "removed" : "saved"), |
| 108 |
110 purple_account_get_username(account), |
| 109 } |
111 purple_account_get_protocol_id(account)); |
| 110 |
112 |
| 111 if (cb != NULL) |
113 if (cb != NULL) |
| 112 cb(account, NULL, data); |
114 cb(account, NULL, data); |
| 113 } |
115 } |
| 114 |
116 |
| 125 internal_keyring_import_password(PurpleAccount *account, |
127 internal_keyring_import_password(PurpleAccount *account, |
| 126 const char *mode, |
128 const char *mode, |
| 127 const char *data, |
129 const char *data, |
| 128 GError **error) |
130 GError **error) |
| 129 { |
131 { |
| 130 ACTIVATE(); |
132 g_return_if_fail(account != NULL); |
| 131 |
133 g_return_if_fail(data != NULL); |
| 132 purple_debug_info("keyring-internal", "Importing password.\n"); |
134 |
| 133 |
135 ACTIVATE(); |
| 134 if (account != NULL && |
136 |
| 135 data != NULL && |
137 if (mode == NULL || g_strcmp0(mode, "cleartext") == 0) { |
| 136 (mode == NULL || g_strcmp0(mode, "cleartext") == 0)) { |
|
| 137 |
|
| 138 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(data)); |
138 g_hash_table_replace(internal_keyring_passwords, account, g_strdup(data)); |
| 139 return TRUE; |
139 return TRUE; |
| 140 |
|
| 141 } else { |
140 } else { |
| 142 *error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOPASSWD, "No password for account."); |
141 if (error != NULL) { |
| |
142 *error = g_error_new(PURPLE_KEYRING_ERROR, |
| |
143 PURPLE_KEYRING_ERROR_WRONGFORMAT, |
| |
144 "invalid mode"); |
| |
145 } |
| 143 return FALSE; |
146 return FALSE; |
| 144 |
|
| 145 } |
147 } |
| 146 |
148 |
| 147 return TRUE; |
149 return TRUE; |
| 148 } |
150 } |
| 149 |
151 |