diff options
Diffstat (limited to 'sm/gpgsm.c')
-rw-r--r-- | sm/gpgsm.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c index 9379a4b92..fe3e664b3 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -512,10 +512,10 @@ main ( int argc, char **argv) int nogreeting = 0; int use_random_seed = 1; int with_fpr = 0; - char *def_cipher_string = NULL; char *def_digest_string = NULL; enum cmd_and_opt_values cmd = 0; struct server_control_s ctrl; + CERTLIST recplist = NULL; /* FIXME: trap_unaligned ();*/ set_strusage (my_strusage); @@ -541,6 +541,7 @@ main ( int argc, char **argv) create_dotlock (NULL); /* register locking cleanup */ i18n_init(); + opt.def_cipher_algoid = "1.2.840.113549.3.7"; /*des-EDE3-CBC*/ #ifdef __MINGW32__ opt.homedir = read_w32_registry_string ( NULL, "Software\\GNU\\GnuPG", "HomeDir" ); @@ -762,6 +763,10 @@ main ( int argc, char **argv) gcry_control (GCRYCTL_DISABLE_SECMEM_WARN); break; + case oCipherAlgo: + opt.def_cipher_algoid = pargs.r.ret_str; + break; + case oDisableCipherAlgo: { int algo = gcry_cipher_map_name (pargs.r.ret_str); @@ -780,6 +785,8 @@ main ( int argc, char **argv) case oEnableSpecialFilenames: allow_special_filenames =1; break; + + default: pargs.err = configfp? 1:2; break; @@ -832,16 +839,12 @@ main ( int argc, char **argv) /* FIXME: should set filenames of libgcrypt explicitly * gpg_opt_homedir = opt.homedir; */ - /* must do this after dropping setuid, because string_to... - * may try to load an module */ - if (def_cipher_string) - { - opt.def_cipher_algo = gcry_cipher_map_name (def_cipher_string); - xfree (def_cipher_string); - def_cipher_string = NULL; - if ( our_cipher_test_algo (opt.def_cipher_algo) ) - log_error (_("selected cipher algorithm is invalid\n")); - } + /* must do this after dropping setuid, because the mapping functions + may try to load an module and we may have disabled an algorithm */ + if ( !gcry_cipher_map_name (opt.def_cipher_algoid) + || !gcry_cipher_mode_from_oid (opt.def_cipher_algoid)) + log_error (_("selected cipher algorithm is invalid\n")); + if (def_digest_string) { opt.def_digest_algo = gcry_md_map_name (def_digest_string); @@ -875,6 +878,18 @@ main ( int argc, char **argv) for (sl = nrings; sl; sl = sl->next) keydb_add_resource (sl->d, 0, 0); FREE_STRLIST(nrings); + + for (sl = remusr; sl; sl = sl->next) + { + int rc = gpgsm_add_to_certlist (sl->d, &recplist); + if (rc) + log_error (_("can't encrypt to `%s': %s\n"), + sl->d, gnupg_strerror (rc)); + } + if (log_get_errorcount(0)) + gpgsm_exit(1); /* must stop for invalid recipients */ + + fname = argc? *argv : NULL; @@ -886,9 +901,9 @@ main ( int argc, char **argv) case aEncr: /* encrypt the given file */ if (!argc) - gpgsm_encrypt (&ctrl, 0, stdout); /* from stdin */ + gpgsm_encrypt (&ctrl, recplist, 0, stdout); /* from stdin */ else if (argc == 1) - gpgsm_encrypt (&ctrl, open_read (*argv), stdout); /* from file */ + gpgsm_encrypt (&ctrl, recplist, open_read (*argv), stdout); /* from file */ else wrong_args (_("--encrypt [datafile]")); break; @@ -1066,6 +1081,7 @@ main ( int argc, char **argv) } /* cleanup */ + gpgsm_release_certlist (recplist); FREE_STRLIST(remusr); FREE_STRLIST(locusr); gpgsm_exit(0); |