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