247 |
/* Create a string that contain all keyids from |
/* Create a string that contain all keyids from |
248 |
the key list @rset separated by a space. */ |
the key list @rset separated by a space. */ |
249 |
char* |
char* |
250 |
gpg_keylist_to_pattern (gpgme_key_t *rset, int n) |
gpg_keylist_to_pattern (gpgme_key_t *rset, size_t n) |
251 |
{ |
{ |
252 |
char *p; |
char *p; |
253 |
int i; |
size_t i; |
254 |
|
|
255 |
if (!n) |
if (!n) |
256 |
return NULL; |
return NULL; |
274 |
GPGME *ctx; |
GPGME *ctx; |
275 |
char *patt=NULL; |
char *patt=NULL; |
276 |
char buf[256]; |
char buf[256]; |
277 |
int n=0; |
size_t n=0; |
278 |
int rc=0; |
int rc=0; |
279 |
|
|
280 |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
318 |
{ |
{ |
319 |
gpgme_key_t *rset; |
gpgme_key_t *rset; |
320 |
gpgme_error_t err; |
gpgme_error_t err; |
321 |
int n = 0; |
size_t n = 0; |
322 |
|
|
323 |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
324 |
if (!n) { |
if (!n) { |
340 |
log_box (_("Key Manager"), MB_OK, |
log_box (_("Key Manager"), MB_OK, |
341 |
_("Secret key successfully saved in '%s'."), fname); |
_("Secret key successfully saved in '%s'."), fname); |
342 |
|
|
343 |
free (rset); |
safe_free (rset); |
344 |
return err? WPTERR_GENERAL : 0; |
return err? WPTERR_GENERAL : 0; |
345 |
} |
} |
346 |
|
|
353 |
gpgme_key_t *rset; |
gpgme_key_t *rset; |
354 |
gpgme_error_t err; |
gpgme_error_t err; |
355 |
char *patt; |
char *patt; |
356 |
int n; |
size_t n; |
357 |
|
|
358 |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n); |
359 |
if (!n) { |
if (!n) { |
402 |
} |
} |
403 |
|
|
404 |
|
|
|
/* Import the PGP key data from the clipboard. |
|
|
Return value: 0 on success. */ |
|
|
static gpgme_error_t |
|
|
gpg_op_clip_import (gpgme_ctx_t ctx) |
|
|
{ |
|
|
gpgme_error_t err = 0; |
|
|
gpgme_data_t keydata = NULL; |
|
|
|
|
|
err = gpg_data_new_from_clipboard (&keydata, 0); |
|
|
if (!err) |
|
|
err = gpgme_op_import (ctx, keydata); |
|
|
|
|
|
gpgme_data_release (keydata); |
|
|
return err; |
|
|
} |
|
|
|
|
405 |
/* Import keys from the clipboard. */ |
/* Import keys from the clipboard. */ |
406 |
int |
int |
407 |
km_clip_import (HWND dlg, int *r_newkeys, int *r_newsks) |
km_clip_import (HWND dlg, int *r_newkeys, int *r_newsks) |
408 |
{ |
{ |
409 |
gpgme_error_t err; |
gpgme_error_t err; |
|
gpgme_ctx_t ctx = NULL; |
|
410 |
gpgme_import_result_t res; |
gpgme_import_result_t res; |
411 |
|
GPGME *gpg = NULL; |
412 |
fm_state_s fm_stat; |
fm_state_s fm_stat; |
413 |
int pgptype; |
int pgptype; |
414 |
int id, has_data = 0; |
int id, has_data = 0; |
452 |
if (!has_data) |
if (!has_data) |
453 |
goto leave; |
goto leave; |
454 |
|
|
455 |
err = gpgme_new (&ctx); |
gpg = new GPGME (); |
456 |
if (err) |
err = gpg->importFromClipboard (); |
|
BUG (NULL); |
|
|
op_begin (); |
|
|
err = gpg_op_clip_import (ctx); |
|
|
op_end (); |
|
457 |
if (err) { |
if (err) { |
458 |
msg_box (dlg, gpgme_strerror (err), _("Import"), MB_ERR); |
msg_box (dlg, gpgme_strerror (err), _("Import"), MB_ERR); |
459 |
goto leave; |
goto leave; |
460 |
} |
} |
461 |
|
|
462 |
res = gpgme_op_import_result (ctx); |
res = gpg->importGetResult (); |
463 |
print_import_status (res); |
print_import_status (res); |
464 |
new_keys = res->considered - res->unchanged; |
new_keys = res->considered - res->unchanged; |
465 |
new_sks = res->secret_imported - res->secret_unchanged; |
new_sks = res->secret_imported - res->secret_unchanged; |
470 |
} |
} |
471 |
|
|
472 |
leave: |
leave: |
473 |
if (ctx) |
if (gpg) |
474 |
gpgme_release (ctx); |
delete gpg; |
475 |
free_if_alloc (fm_stat.opaque); |
free_if_alloc (fm_stat.opaque); |
476 |
if (r_newkeys) |
if (r_newkeys) |
477 |
*r_newkeys = new_keys; |
*r_newkeys = new_keys; |
489 |
{ |
{ |
490 |
FILE *fp; |
FILE *fp; |
491 |
wHTTP *hd; |
wHTTP *hd; |
492 |
char tmpfile[500]; |
char tmpfile[MAX_PATH+64]; |
493 |
int rc = 0; |
int rc = 0; |
494 |
|
|
495 |
if (strncmp (url, "http://", 7)) { |
if (strncmp (url, "http://", 7)) { |
528 |
On success an import statistics dialog is shown. */ |
On success an import statistics dialog is shown. */ |
529 |
int |
int |
530 |
km_file_import (HWND dlg, const char *fname, int *r_newkeys, int *r_newsks) |
km_file_import (HWND dlg, const char *fname, int *r_newkeys, int *r_newsks) |
531 |
{ |
{ |
532 |
gpgme_data_t keydata = NULL; |
gpgme_error_t err; |
|
gpgme_ctx_t ctx; |
|
|
gpgme_error_t err; |
|
|
fm_state_s fm_stat; |
|
533 |
gpgme_import_result_t res; |
gpgme_import_result_t res; |
534 |
|
GPGME *gpg; |
535 |
|
fm_state_s fm_stat; |
536 |
const char *name; |
const char *name; |
537 |
int no_data = 0; |
int no_data = 0; |
538 |
int new_keys = 0, new_sks = 0; |
int new_keys = 0, new_sks = 0; |
557 |
return WPTERR_GENERAL; |
return WPTERR_GENERAL; |
558 |
} |
} |
559 |
|
|
560 |
err = gpgme_new (&ctx); |
gpg = new GPGME (); |
561 |
if (err) |
err = gpg->importFromFile (name); |
|
BUG (NULL); |
|
|
err = gpgme_data_new_from_file (&keydata, name, 1); |
|
562 |
if (err) { |
if (err) { |
563 |
msg_box (dlg, _("Could not read key-data from file."), |
msg_box (dlg, gpgme_strerror (err), _("Import"), MB_ERR); |
564 |
_("Key Manager"), MB_ERR); |
goto leave; |
|
goto leave; |
|
565 |
} |
} |
|
|
|
|
op_begin (); |
|
|
err = gpgme_op_import (ctx, keydata); |
|
|
op_end (); |
|
|
if (err) { |
|
|
msg_box (dlg, gpgme_strerror (err), _("Key Manager"), MB_ERR); |
|
|
goto leave; |
|
|
} |
|
566 |
|
|
567 |
res = gpgme_op_import_result (ctx); |
res = gpg->importGetResult (); |
568 |
if (res->unchanged == res->considered && |
if (res->unchanged == res->considered && |
569 |
res->secret_unchanged == res->secret_imported) |
res->secret_unchanged == res->secret_imported) |
570 |
no_data = 1; |
no_data = 1; |
575 |
if (res->secret_imported == 0 && fm_stat.import.has_seckey == 1) |
if (res->secret_imported == 0 && fm_stat.import.has_seckey == 1) |
576 |
res->secret_imported = 1; |
res->secret_imported = 1; |
577 |
|
|
|
/* XXX: if we import a key pair but the secret key comes first, |
|
|
no_{valid}_user_id is 1 even so the public key, which comes |
|
|
later is valid and self-signed. */ |
|
578 |
print_import_status (res); |
print_import_status (res); |
579 |
if (res->no_user_id > 0) { |
if (res->no_user_id > 0) { |
580 |
msg_box (dlg, _("Key without a self signature was dectected!\n" |
msg_box (dlg, _("Key without a self signature was dectected!\n" |
583 |
} |
} |
584 |
|
|
585 |
leave: |
leave: |
586 |
gpgme_data_release (keydata); |
delete gpg; |
|
gpgme_release (ctx); |
|
587 |
free_if_alloc (fm_stat.opaque); |
free_if_alloc (fm_stat.opaque); |
588 |
if (r_newkeys) |
if (r_newkeys) |
589 |
*r_newkeys = new_keys; |
*r_newkeys = new_keys; |