2319{
2321 gpgme_data_t keydata = NULL;
2322 gpgme_import_result_t impres = NULL;
2323 gpgme_import_status_t st = NULL;
2324 bool any;
2325
2327 if (!fp_in)
2328 {
2330 goto leave;
2331 }
2332
2333
2334 gpgme_error_t err = gpgme_data_new_from_stream(&keydata, fp_in);
2335 if (err != GPG_ERR_NO_ERROR)
2336 {
2337 mutt_error(
_(
"error allocating data object: %s"), gpgme_strerror(err));
2338 goto leave;
2339 }
2340
2341 err = gpgme_op_import(ctx, keydata);
2342 if (err != GPG_ERR_NO_ERROR)
2343 {
2344 mutt_error(
_(
"Error importing key: %s"), gpgme_strerror(err));
2345 goto leave;
2346 }
2347
2348
2349 impres = gpgme_op_import_result(ctx);
2350 if (!impres)
2351 {
2352 fputs("oops: no import result returned\n", stdout);
2353 goto leave;
2354 }
2355
2356 for (st = impres->imports; st; st = st->next)
2357 {
2358 if (st->result)
2359 continue;
2360 printf(
"key %s imported (",
NONULL(st->fpr));
2361
2362
2363 any = false;
2364 if (st->status & GPGME_IMPORT_SECRET)
2365 {
2366 printf("secret parts");
2367 any = true;
2368 }
2369 if ((st->status & GPGME_IMPORT_NEW))
2370 {
2371 printf("%snew key", any ? ", " : "");
2372 any = true;
2373 }
2374 if ((st->status & GPGME_IMPORT_UID))
2375 {
2376 printf("%snew uid", any ? ", " : "");
2377 any = true;
2378 }
2379 if ((st->status & GPGME_IMPORT_SIG))
2380 {
2381 printf("%snew sig", any ? ", " : "");
2382 any = true;
2383 }
2384 if ((st->status & GPGME_IMPORT_SUBKEY))
2385 {
2386 printf("%snew subkey", any ? ", " : "");
2387 any = true;
2388 }
2389 printf("%s)\n", any ? "" : "not changed");
2390
2391 }
2392
2393
2394
2395
2396
2397
2398 for (st = impres->imports; st; st = st->next)
2399 {
2400 if (st->result == 0)
2401 continue;
2402 printf(
"key %s import failed: %s\n",
NONULL(st->fpr), gpgme_strerror(st->result));
2403 }
2404 fflush(stdout);
2405
2406leave:
2407 gpgme_release(ctx);
2408 gpgme_data_release(keydata);
2410}
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)