aboutsummaryrefslogtreecommitdiffstats
path: root/sm/gpgsm.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2021-05-26 12:28:26 +0000
committerWerner Koch <[email protected]>2021-06-16 10:03:13 +0000
commitbebc71d2291e93afb76792c5e210836857103c36 (patch)
tree93de670211b693b510304bd28df71cb27803ddce /sm/gpgsm.c
parentdirmngr: Support pseudo URI scheme "opaque". (diff)
downloadgnupg-bebc71d2291e93afb76792c5e210836857103c36.tar.gz
gnupg-bebc71d2291e93afb76792c5e210836857103c36.zip
gpg,sm: Simplify keyserver spec parsing.
* common/keyserver.h: Remove. * sm/gpgsm.h (struct keyserver_spec): Remove. (opt): Change keyserver to a strlist_t. * sm/gpgsm.c (keyserver_list_free): Remove. (parse_keyserver_line): Remove. (main): Store keyserver in an strlist. * sm/call-dirmngr.c (prepare_dirmngr): Adjust for the strlist. Avoid an ambiguity in dirmngr by adding a prefix if needed. * g10/options.h (struct keyserver_spec): Move definition from keyserver.h to here. Remove most fields. * g10/keyserver.c (free_keyserver_spec): Adjust. (cmp_keyserver_spec): Adjust. (parse_keyserver_uri): Simplify. (keyidlist): Remove fakev3 arg which does not make any sense because we don't even support v3 keys. -- We now rely on the dirmngr to parse the keyserver specs. Thus a bad specification will not be caught immediately. However, even before that dirmngr had stricter tests. Signed-off-by: Werner Koch <[email protected]> Ported-from: 9f586700ec4ceac97fd47cd799878a8847342ffa
Diffstat (limited to 'sm/gpgsm.c')
-rw-r--r--sm/gpgsm.c145
1 files changed, 2 insertions, 143 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 3c6fe9c76..940d65fec 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -840,133 +840,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;
- const char *s;
- struct keyserver_spec *server;
- int fieldno;
- int fail = 0;
- int i;
-
- if (!filename)
- {
- filename = "[cmd]";
- lineno = 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;
-
- case 6:
- {
- char **flags = NULL;
-
- flags = strtokenize (p, ",");
- if (!flags)
- log_fatal ("strtokenize failed: %s\n",
- gpg_strerror (gpg_error_from_syserror ()));
-
- for (i=0; (s = flags[i]); i++)
- {
- if (!*s)
- ;
- else if (!ascii_strcasecmp (s, "ldaps"))
- server->use_ldaps = 1;
- else if (!ascii_strcasecmp (s, "ldap"))
- server->use_ldaps = 0;
- else
- log_info (_("%s:%u: ignoring unknown flag '%s'\n"),
- filename, lineno, s);
- }
-
- xfree (flags);
- }
- 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)
@@ -1541,21 +1414,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:
@@ -2285,7 +2144,7 @@ main ( int argc, char **argv)
/* cleanup */
gpgsm_deinit_default_ctrl (&ctrl);
- keyserver_list_free (opt.keyserver);
+ free_strlist (opt.keyserver);
opt.keyserver = NULL;
gpgsm_release_certlist (recplist);
gpgsm_release_certlist (signerlist);