libpurple/keyring.c

branch
soc.2008.masterpassword
changeset 34116
825c98f8c7f6
parent 34110
bda1c52322fe
child 34117
543818e9829a
equal deleted inserted replaced
34115:a0f9b38226eb 34116:825c98f8c7f6
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);

mercurial