summaryrefslogtreecommitdiff
path: root/sm/gpgsm.c
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2022-09-16 07:44:51 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2022-09-16 07:44:51 +0900
commitc5ff1325db87c374d0a7b3785ff1e1342a0be2ba (patch)
tree054a42ddf0c96da0f09b4b976f9ca5732cd308d3 /sm/gpgsm.c
parent43b7b348be0a4e502da85f9f372dad3472667777 (diff)
downloadgpg2-c5ff1325db87c374d0a7b3785ff1e1342a0be2ba.tar.gz
gpg2-c5ff1325db87c374d0a7b3785ff1e1342a0be2ba.tar.bz2
gpg2-c5ff1325db87c374d0a7b3785ff1e1342a0be2ba.zip
Imported Upstream version 2.2.28upstream/2.2.28
Diffstat (limited to 'sm/gpgsm.c')
-rw-r--r--sm/gpgsm.c132
1 files changed, 19 insertions, 113 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 55a92c6..5c1f0bb 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -45,6 +45,7 @@
#include "../common/asshelp.h"
#include "../common/init.h"
#include "../common/compliance.h"
+#include "minip12.h"
#ifndef O_BINARY
@@ -336,8 +337,10 @@ static ARGPARSE_OPTS opts[] = {
/* N_("use the default key as default recipient")), */
/* ARGPARSE_s_n (oNoDefRecipient, "no-default-recipient", "@"), */
- ARGPARSE_s_s (oKeyServer, "keyserver",
+ ARGPARSE_s_s (oKeyServer, "ldapserver",
N_("|SPEC|use this keyserver to lookup keys")),
+ ARGPARSE_s_s (oKeyServer, "keyserver", "@"),
+
ARGPARSE_conffile (oOptions, "options", N_("|FILE|read options from FILE")),
ARGPARSE_s_s (oDebug, "debug", "@"),
@@ -731,6 +734,10 @@ set_debug (void)
if (opt.debug)
parse_debug_flag (NULL, &opt.debug, debug_flags);
+
+ /* minip12.c may be used outside of GnuPG, thus we don't have the
+ * opt structure over there. */
+ p12_set_verbosity (opt.verbose);
}
@@ -791,99 +798,6 @@ parse_validation_model (const char *model)
}
-/* Release the list of SERVERS. As usual it is okay to call this
- function with SERVERS passed as NULL. */
-void
-keyserver_list_free (struct keyserver_spec *servers)
-{
- while (servers)
- {
- struct keyserver_spec *tmp = servers->next;
- xfree (servers->host);
- xfree (servers->user);
- if (servers->pass)
- memset (servers->pass, 0, strlen (servers->pass));
- xfree (servers->pass);
- xfree (servers->base);
- xfree (servers);
- servers = tmp;
- }
-}
-
-/* See also dirmngr ldapserver_parse_one(). */
-struct keyserver_spec *
-parse_keyserver_line (char *line,
- const char *filename, unsigned int lineno)
-{
- char *p;
- char *endp;
- struct keyserver_spec *server;
- int fieldno;
- int fail = 0;
-
- /* Parse the colon separated fields. */
- server = xcalloc (1, sizeof *server);
- for (fieldno = 1, p = line; p; p = endp, fieldno++ )
- {
- endp = strchr (p, ':');
- if (endp)
- *endp++ = '\0';
- trim_spaces (p);
- switch (fieldno)
- {
- case 1:
- if (*p)
- server->host = xstrdup (p);
- else
- {
- log_error (_("%s:%u: no hostname given\n"),
- filename, lineno);
- fail = 1;
- }
- break;
-
- case 2:
- if (*p)
- server->port = atoi (p);
- break;
-
- case 3:
- if (*p)
- server->user = xstrdup (p);
- break;
-
- case 4:
- if (*p && !server->user)
- {
- log_error (_("%s:%u: password given without user\n"),
- filename, lineno);
- fail = 1;
- }
- else if (*p)
- server->pass = xstrdup (p);
- break;
-
- case 5:
- if (*p)
- server->base = xstrdup (p);
- break;
-
- default:
- /* (We silently ignore extra fields.) */
- break;
- }
- }
-
- if (fail)
- {
- log_info (_("%s:%u: skipping this line\n"), filename, lineno);
- keyserver_list_free (server);
- server = NULL;
- }
-
- return server;
-}
-
int
main ( int argc, char **argv)
@@ -1441,21 +1355,7 @@ main ( int argc, char **argv)
case oValidationModel: parse_validation_model (pargs.r.ret_str); break;
case oKeyServer:
- {
- struct keyserver_spec *keyserver;
- keyserver = parse_keyserver_line (pargs.r.ret_str,
- configname, pargs.lineno);
- if (! keyserver)
- log_error (_("could not parse keyserver\n"));
- else
- {
- /* FIXME: Keep last next pointer. */
- struct keyserver_spec **next_p = &opt.keyserver;
- while (*next_p)
- next_p = &(*next_p)->next;
- *next_p = keyserver;
- }
- }
+ append_to_strlist (&opt.keyserver, pargs.r.ret_str);
break;
case oIgnoreCertExtension:
@@ -1927,16 +1827,22 @@ main ( int argc, char **argv)
case aDecrypt:
{
estream_t fp = open_es_fwrite (opt.outfile?opt.outfile:"-");
+ gpg_error_t err;
set_binary (stdin);
if (!argc)
- gpgsm_decrypt (&ctrl, 0, fp); /* from stdin */
+ err = gpgsm_decrypt (&ctrl, 0, fp); /* from stdin */
else if (argc == 1)
- gpgsm_decrypt (&ctrl, open_read (*argv), fp); /* from file */
+ err = gpgsm_decrypt (&ctrl, open_read (*argv), fp); /* from file */
else
wrong_args ("--decrypt [filename]");
- es_fclose (fp);
+#if GPGRT_VERSION_NUMBER >= 0x012700 /* 1.39 */
+ if (err)
+ gpgrt_fcancel (fp);
+ else
+#endif
+ es_fclose (fp);
}
break;
@@ -2137,7 +2043,7 @@ main ( int argc, char **argv)
}
/* cleanup */
- keyserver_list_free (opt.keyserver);
+ free_strlist (opt.keyserver);
opt.keyserver = NULL;
gpgsm_release_certlist (recplist);
gpgsm_release_certlist (signerlist);