2332{
2334 gpgme_data_t keydata = NULL;
2335 gpgme_import_result_t impres = NULL;
2336 gpgme_import_status_t st = NULL;
2337 bool any;
2338
2340 if (!fp_in)
2341 {
2343 goto leave;
2344 }
2345
2346
2347 gpgme_error_t err = gpgme_data_new_from_stream(&keydata, fp_in);
2348 if (err != GPG_ERR_NO_ERROR)
2349 {
2350 mutt_error(
_(
"error allocating data object: %s"), gpgme_strerror(err));
2351 goto leave;
2352 }
2353
2354 err = gpgme_op_import(ctx, keydata);
2355 if (err != GPG_ERR_NO_ERROR)
2356 {
2357 mutt_error(
_(
"Error importing key: %s"), gpgme_strerror(err));
2358 goto leave;
2359 }
2360
2361
2362 impres = gpgme_op_import_result(ctx);
2363 if (!impres)
2364 {
2365 fputs("oops: no import result returned\n", stdout);
2366 goto leave;
2367 }
2368
2369 for (st = impres->imports; st; st = st->next)
2370 {
2371 if (st->result)
2372 continue;
2373 printf(
"key %s imported (",
NONULL(st->fpr));
2374
2375
2376 any = false;
2377 if (st->status & GPGME_IMPORT_SECRET)
2378 {
2379 printf("secret parts");
2380 any = true;
2381 }
2382 if ((st->status & GPGME_IMPORT_NEW))
2383 {
2384 printf("%snew key", any ? ", " : "");
2385 any = true;
2386 }
2387 if ((st->status & GPGME_IMPORT_UID))
2388 {
2389 printf("%snew uid", any ? ", " : "");
2390 any = true;
2391 }
2392 if ((st->status & GPGME_IMPORT_SIG))
2393 {
2394 printf("%snew sig", any ? ", " : "");
2395 any = true;
2396 }
2397 if ((st->status & GPGME_IMPORT_SUBKEY))
2398 {
2399 printf("%snew subkey", any ? ", " : "");
2400 any = true;
2401 }
2402 printf("%s)\n", any ? "" : "not changed");
2403
2404 }
2405
2406
2407
2408
2409
2410
2411 for (st = impres->imports; st; st = st->next)
2412 {
2413 if (st->result == 0)
2414 continue;
2415 printf(
"key %s import failed: %s\n",
NONULL(st->fpr), gpgme_strerror(st->result));
2416 }
2417 fflush(stdout);
2418
2419leave:
2420 gpgme_release(ctx);
2421 gpgme_data_release(keydata);
2423}
gpgme_ctx_t create_gpgme_context(bool for_smime)
Create a new GPGME context.
#define mutt_file_fclose(FP)
#define mutt_file_fopen(PATH, MODE)