diff --git a/tools/gpg-wks-client.c b/tools/gpg-wks-client.c index f4257ec5f..4df54cc38 100644 --- a/tools/gpg-wks-client.c +++ b/tools/gpg-wks-client.c @@ -56,6 +56,7 @@ enum cmd_and_opt_values oGpgProgram, oSend, + oFakeSubmissionAddr, oDummy }; @@ -83,6 +84,7 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_n (oSend, "send", "send the mail using sendmail"), ARGPARSE_s_s (oOutput, "output", "|FILE|write the mail to FILE"), + ARGPARSE_s_s (oFakeSubmissionAddr, "fake-submission-addr", "@"), ARGPARSE_end () }; @@ -102,6 +104,11 @@ static struct debug_flags_s debug_flags [] = }; + +/* Value of the option --fake-submission-addr. */ +const char *fake_submission_addr; + + static void wrong_args (const char *text) GPGRT_ATTR_NORETURN; static gpg_error_t command_supported (char *userid); static gpg_error_t command_send (const char *fingerprint, char *userid); @@ -180,6 +187,9 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) case oOutput: opt.output = pargs->r.ret_str; break; + case oFakeSubmissionAddr: + fake_submission_addr = pargs->r.ret_str; + break; case aSupported: case aCreate: @@ -551,30 +561,37 @@ command_send (const char *fingerprint, char *userid) goto leave; /* Get the submission address. */ - err = wkd_get_submission_address (addrspec, &submission_to); + if (fake_submission_addr) + { + submission_to = xstrdup (fake_submission_addr); + err = 0; + } + else + err = wkd_get_submission_address (addrspec, &submission_to); if (err) goto leave; log_info ("submitting request to '%s'\n", submission_to); /* Get the policy flags. */ - { - estream_t mbuf; + if (!fake_submission_addr) + { + estream_t mbuf; - err = wkd_get_policy_flags (addrspec, &mbuf); - if (err) - { - log_error ("error reading policy flags for '%s': %s\n", - submission_to, gpg_strerror (err)); - goto leave; - } - if (mbuf) - { - err = wks_parse_policy (&policy, mbuf, 1); - es_fclose (mbuf); - if (err) + err = wkd_get_policy_flags (addrspec, &mbuf); + if (err) + { + log_error ("error reading policy flags for '%s': %s\n", + submission_to, gpg_strerror (err)); goto leave; } - } + if (mbuf) + { + err = wks_parse_policy (&policy, mbuf, 1); + es_fclose (mbuf); + if (err) + goto leave; + } + } if (policy.auth_submit) log_info ("no confirmation required for '%s'\n", addrspec);