aboutsummaryrefslogtreecommitdiffstats
path: root/sm/gpgsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sm/gpgsm.c')
-rw-r--r--sm/gpgsm.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index f5837079d..2cd3b0c4f 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -817,9 +817,17 @@ parse_keyserver_line (char *line,
{
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);
@@ -833,7 +841,7 @@ parse_keyserver_line (char *line,
{
case 1:
if (*p)
- server->host = xstrdup (p);
+ server->host = xstrdup (p);
else
{
log_error (_("%s:%u: no hostname given\n"),
@@ -868,6 +876,32 @@ parse_keyserver_line (char *line,
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;