| 230 |
230 |
| 231 static GList *purple_keyring_keyrings; /* list of available keyrings */ |
231 static GList *purple_keyring_keyrings; /* list of available keyrings */ |
| 232 static const PurpleKeyring *purple_keyring_inuse; /* keyring being used */ |
232 static const PurpleKeyring *purple_keyring_inuse; /* keyring being used */ |
| 233 static char *purple_keyring_to_use; |
233 static char *purple_keyring_to_use; |
| 234 static guint purple_keyring_pref_cb_id; |
234 static guint purple_keyring_pref_cb_id; |
| |
235 static GList *purple_keyring_loaded_plugins = NULL; |
| 235 |
236 |
| 236 static void |
237 static void |
| 237 purple_keyring_pref_cb(const char *pref, |
238 purple_keyring_pref_cb(const char *pref, |
| 238 PurplePrefType type, |
239 PurplePrefType type, |
| 239 gconstpointer id, |
240 gconstpointer id, |
| 247 |
248 |
| 248 new = purple_keyring_find_keyring_by_id(id); |
249 new = purple_keyring_find_keyring_by_id(id); |
| 249 g_return_if_fail(new != NULL); |
250 g_return_if_fail(new != NULL); |
| 250 |
251 |
| 251 purple_keyring_set_inuse(new, FALSE, NULL, data); |
252 purple_keyring_set_inuse(new, FALSE, NULL, data); |
| |
253 } |
| |
254 |
| |
255 void purple_keyring_load_plugins(void) |
| |
256 { |
| |
257 GList *it; |
| |
258 |
| |
259 for (it = purple_plugins_get_all(); it != NULL; it = it->next) |
| |
260 { |
| |
261 PurplePlugin *plugin = (PurplePlugin *)it->data; |
| |
262 |
| |
263 if (plugin->info == NULL || plugin->info->id == NULL) |
| |
264 continue; |
| |
265 if (strncmp(plugin->info->id, "keyring-", 8) != 0) |
| |
266 continue; |
| |
267 |
| |
268 if (purple_plugin_is_loaded(plugin)) |
| |
269 continue; |
| |
270 |
| |
271 if (purple_plugin_load(plugin)) |
| |
272 { |
| |
273 purple_keyring_loaded_plugins = g_list_append( |
| |
274 purple_keyring_loaded_plugins, plugin); |
| |
275 } |
| |
276 } |
| 252 } |
277 } |
| 253 |
278 |
| 254 void |
279 void |
| 255 purple_keyring_init(void) |
280 purple_keyring_init(void) |
| 256 { |
281 { |
| 295 } |
320 } |
| 296 |
321 |
| 297 void |
322 void |
| 298 purple_keyring_uninit(void) |
323 purple_keyring_uninit(void) |
| 299 { |
324 { |
| |
325 GList *it; |
| |
326 |
| 300 g_free(purple_keyring_to_use); |
327 g_free(purple_keyring_to_use); |
| 301 purple_debug_info("keyring", "purple_keyring_uninit() done.\n"); |
328 |
| |
329 for (it = g_list_first(purple_keyring_loaded_plugins); it != NULL; |
| |
330 it = g_list_next(it)) |
| |
331 { |
| |
332 PurplePlugin *plugin = (PurplePlugin *)it->data; |
| |
333 if (g_list_find(purple_plugins_get_loaded(), plugin) == NULL) |
| |
334 continue; |
| |
335 purple_plugin_unload(plugin); |
| |
336 } |
| |
337 g_list_free(purple_keyring_loaded_plugins); |
| |
338 purple_keyring_loaded_plugins = NULL; |
| 302 } |
339 } |
| 303 |
340 |
| 304 PurpleKeyring * |
341 PurpleKeyring * |
| 305 purple_keyring_find_keyring_by_id(const char *id) |
342 purple_keyring_find_keyring_by_id(const char *id) |
| 306 { |
343 { |
| 789 GError *error = NULL; |
826 GError *error = NULL; |
| 790 const PurpleKeyring *inuse; |
827 const PurpleKeyring *inuse; |
| 791 PurpleKeyringRead read; |
828 PurpleKeyringRead read; |
| 792 |
829 |
| 793 if (account == NULL) { |
830 if (account == NULL) { |
| 794 purple_debug_error("keyring", "No account passed to the function."); |
831 purple_debug_error("keyring", "No account passed to the function.\n"); |
| 795 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_INVALID, |
832 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_INVALID, |
| 796 "No account passed to the function."); |
833 "No account passed to the function."); |
| 797 |
834 |
| 798 if (cb != NULL) |
835 if (cb != NULL) |
| 799 cb(account, NULL, error, data); |
836 cb(account, NULL, error, data); |
| 802 |
839 |
| 803 } else { |
840 } else { |
| 804 inuse = purple_keyring_get_inuse(); |
841 inuse = purple_keyring_get_inuse(); |
| 805 |
842 |
| 806 if (inuse == NULL) { |
843 if (inuse == NULL) { |
| 807 purple_debug_error("keyring", "No keyring configured."); |
844 purple_debug_error("keyring", "No keyring configured.\n"); |
| 808 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOKEYRING, |
845 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOKEYRING, |
| 809 "No keyring configured."); |
846 "No keyring configured."); |
| 810 |
847 |
| 811 if (cb != NULL) |
848 if (cb != NULL) |
| 812 cb(account, NULL, error, data); |
849 cb(account, NULL, error, data); |
| 815 |
852 |
| 816 } else { |
853 } else { |
| 817 read = purple_keyring_get_read_password(inuse); |
854 read = purple_keyring_get_read_password(inuse); |
| 818 |
855 |
| 819 if (read == NULL) { |
856 if (read == NULL) { |
| 820 purple_debug_warning("keyring", "Keyring cannot read password."); |
857 purple_debug_warning("keyring", "Keyring cannot read password.\n"); |
| 821 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOCAP, |
858 error = g_error_new(PURPLE_KEYRING_ERROR, PURPLE_KEYRING_ERROR_NOCAP, |
| 822 "Keyring cannot read password."); |
859 "Keyring cannot read password."); |
| 823 |
860 |
| 824 if (cb != NULL) |
861 if (cb != NULL) |
| 825 cb(account, NULL, error, data); |
862 cb(account, NULL, error, data); |