diff options
author | Werner Koch <[email protected]> | 2021-05-26 13:49:14 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2021-06-16 10:42:02 +0000 |
commit | 52cf32ce2f904b2e6f53f406a90458f6ef148af9 (patch) | |
tree | 7273c723a0b9d9942493694fa4dba9fd8665edb0 /dirmngr/server.c | |
parent | dirmngr: Allow for non-URL specified ldap keyservers. (diff) | |
download | gnupg-52cf32ce2f904b2e6f53f406a90458f6ef148af9.tar.gz gnupg-52cf32ce2f904b2e6f53f406a90458f6ef148af9.zip |
dirmngr: New option --ldapserver
* dirmngr/dirmngr.c (opts): Add option --ldapserver.
(ldapserver_list_needs_reset): New var.
(parse_rereadable_options): Implement option.
(main): Ignore dirmngr_ldapservers.conf if no --ldapserver is used.
* dirmngr/server.c (cmd_ldapserver): Add option --clear and list
configured servers if none are given.
--
This option allows to specify LDAP keyserver in dirmngr instead of
using gpgsm.conf.
Signed-off-by: Werner Koch <[email protected]>
(cherry picked from commit ff17aee5d10c8c5ab902253fb4332001c3fc3701)
Diffstat (limited to 'dirmngr/server.c')
-rw-r--r-- | dirmngr/server.c | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/dirmngr/server.c b/dirmngr/server.c index 105275845..c5542fe6c 100644 --- a/dirmngr/server.c +++ b/dirmngr/server.c @@ -1140,11 +1140,13 @@ task_check_wkd_support (ctrl_t ctrl, const char *domain) static const char hlp_ldapserver[] = - "LDAPSERVER <data>\n" + "LDAPSERVER [--clear] <data>\n" "\n" "Add a new LDAP server to the list of configured LDAP servers.\n" "DATA is in the same format as expected in the configure file.\n" - "An optional prefix \"ldap:\" is allowed."; + "An optional prefix \"ldap:\" is allowed. With no args all\n" + "configured ldapservers are listed. Option --clear removes all\n" + "servers configured in this session."; static gpg_error_t cmd_ldapserver (assuan_context_t ctx, char *line) { @@ -1152,11 +1154,57 @@ cmd_ldapserver (assuan_context_t ctx, char *line) ctrl_t ctrl = assuan_get_pointer (ctx); ldap_server_t server; ldap_server_t *last_next_p; + int clear_flag; + clear_flag = has_option (line, "--clear"); + line = skip_options (line); while (spacep (line)) line++; - if (*line == '\0') - return leave_cmd (ctx, PARM_ERROR (_("ldapserver missing"))); + + if (clear_flag) + { +#if USE_LDAP + ldapserver_list_free (ctrl->server_local->ldapservers); +#endif /*USE_LDAP*/ + ctrl->server_local->ldapservers = NULL; + } + + if (!*line && clear_flag) + return leave_cmd (ctx, 0); + + if (!*line) + { + /* List all ldapservers. */ + struct ldapserver_iter ldapserver_iter; + char *tmpstr; + char portstr[20]; + + for (ldapserver_iter_begin (&ldapserver_iter, ctrl); + !ldapserver_iter_end_p (&ldapserver_iter); + ldapserver_iter_next (&ldapserver_iter)) + { + server = ldapserver_iter.server; + if (server->port) + snprintf (portstr, sizeof portstr, "%d", server->port); + else + *portstr = 0; + + tmpstr = xtryasprintf ("ldap:%s:%s:%s:%s:%s:%s%s:", + server->host? server->host : "", + portstr, + server->user? server->user : "", + server->pass? "[not_shown]": "", + server->base? server->base : "", + server->starttls ? "starttls" : + server->ldap_over_tls ? "ldaptls" : "none", + server->ntds ? ",ntds" : ""); + if (!tmpstr) + return leave_cmd (ctx, gpg_error_from_syserror ()); + dirmngr_status (ctrl, "LDAPSERVER", tmpstr, NULL); + xfree (tmpstr); + } + return leave_cmd (ctx, 0); + } /* Skip an "ldap:" prefix unless it is a valid ldap url. */ if (!strncmp (line, "ldap:", 5) && !(line[5] == '/' && line[6] == '/')) |