const backend_gkeyring_context_t* dt_pwstorage_gkeyring_new() { backend_gkeyring_context_t *context = (backend_gkeyring_context_t*)g_malloc(sizeof(backend_gkeyring_context_t)); #ifdef DARKTABLE_KEYRING /* Check if darktable keyring exists, if not create it */ gboolean keyring_exists = FALSE; GList *keyrings = NULL,*item = NULL; gnome_keyring_list_keyring_names_sync(&keyrings); if ( keyrings && (item = keyrings)) { do { if (strcmp ((gchar *)item->data,DARKTABLE_KEYRING)==0) { keyring_exists = TRUE; break; } } while ((item = g_list_next (item)) != NULL); gnome_keyring_string_list_free(keyrings); } if (keyring_exists == FALSE) gnome_keyring_create_sync (DARKTABLE_KEYRING,NULL); #else #define DARKTABLE_KEYRING NULL #endif /* unlock darktable keyring */ // Keep this locked until accessed.. //gnome_keyring_lock_sync(DARKTABLE_KEYRING); return context; }
static int key_listing(int verbose) { GList *keyrings, *current; if (gnome_keyring_list_keyring_names_sync(&keyrings) != OK) { fprintf(stderr, "Couldn't get list of keyring names\n"); return 1; } for (current = keyrings; current; current = current->next) { GList *ids, *cid; gchar *keyring = (gchar *)current->data; printf("Keyring %s\n", keyring); if (gnome_keyring_list_item_ids_sync(keyring, &ids) != OK) { fprintf(stderr, "Couldn't list IDs on keyring %s\n", keyring); continue; } for (cid = ids; cid; cid = cid->next) { GnomeKeyringItemInfo *info; GnomeKeyringResult result = gnome_keyring_item_get_info_full_sync(keyring, GPOINTER_TO_INT(cid->data), GNOME_KEYRING_ITEM_INFO_SECRET, &info); if (result == GNOME_KEYRING_RESULT_OK) { printf(" %s\n", gnome_keyring_item_info_get_display_name(info)); if (verbose) detailed_key_listing(keyring, GPOINTER_TO_INT(cid->data)); gnome_keyring_item_info_free(info); } else { #define CHECKIT(X) case GNOME_KEYRING_RESULT_ ## X: printf(#X "\n"); break switch (result) { CHECKIT(OK); // warning if not included CHECKIT(DENIED); CHECKIT(NO_KEYRING_DAEMON); CHECKIT(ALREADY_UNLOCKED); CHECKIT(NO_SUCH_KEYRING); CHECKIT(BAD_ARGUMENTS); CHECKIT(IO_ERROR); CHECKIT(CANCELLED); CHECKIT(KEYRING_ALREADY_EXISTS); CHECKIT(NO_MATCH); } } } } return 0; }
int keyrings_list() { GList *keyrings; GnomeKeyringResult res = gnome_keyring_list_keyring_names_sync(&keyrings); if (res != GNOME_KEYRING_RESULT_OK) { return keyring_handle_error(res); } for (GList *l = keyrings; l != NULL; l = l->next) { printf("%s\n", (char *) l->data); } return 0; }