Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
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;
}