diff options
Diffstat (limited to 'sm')
-rw-r--r-- | sm/call-dirmngr.c | 5 | ||||
-rw-r--r-- | sm/gpgsm.c | 36 | ||||
-rw-r--r-- | sm/gpgsm.h | 1 |
3 files changed, 39 insertions, 3 deletions
diff --git a/sm/call-dirmngr.c b/sm/call-dirmngr.c index bff7dd652..f3fe1d663 100644 --- a/sm/call-dirmngr.c +++ b/sm/call-dirmngr.c @@ -223,8 +223,9 @@ prepare_dirmngr (ctrl_t ctrl, assuan_context_t ctx, gpg_error_t err) char *pass = server->pass ? server->pass : ""; char *base = server->base ? server->base : ""; - snprintf (line, DIM (line), "LDAPSERVER %s:%i:%s:%s:%s", - server->host, server->port, user, pass, base); + snprintf (line, DIM (line), "LDAPSERVER %s:%i:%s:%s:%s:%s", + server->host, server->port, user, pass, base, + server->use_ldaps? "ldaps":""); assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); /* The code below is not required because we don't return an error. */ 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; diff --git a/sm/gpgsm.h b/sm/gpgsm.h index 65fff853a..43793dcdf 100644 --- a/sm/gpgsm.h +++ b/sm/gpgsm.h @@ -48,6 +48,7 @@ struct keyserver_spec char *user; char *pass; char *base; + unsigned int use_ldaps:1; }; |