aboutsummaryrefslogtreecommitdiffstats
path: root/dirmngr/dirmngr.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2021-05-26 13:49:14 +0000
committerWerner Koch <[email protected]>2021-06-16 10:42:02 +0000
commit52cf32ce2f904b2e6f53f406a90458f6ef148af9 (patch)
tree7273c723a0b9d9942493694fa4dba9fd8665edb0 /dirmngr/dirmngr.c
parentdirmngr: Allow for non-URL specified ldap keyservers. (diff)
downloadgnupg-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/dirmngr.c')
-rw-r--r--dirmngr/dirmngr.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 38ae1c6ed..ebb6ae08a 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -125,6 +125,7 @@ enum cmd_and_opt_values {
oHTTPProxy,
oLDAPProxy,
oOnlyLDAPProxy,
+ oLDAPServer,
oLDAPFile,
oLDAPTimeout,
oLDAPAddServers,
@@ -260,6 +261,8 @@ static gpgrt_opt_t opts[] = {
N_("|HOST|use HOST for LDAP queries")),
ARGPARSE_s_n (oOnlyLDAPProxy, "only-ldap-proxy",
N_("do not use fallback hosts with --ldap-proxy")),
+ ARGPARSE_s_s (oLDAPServer, "ldapserver",
+ N_("|SPEC|use this keyserver to lookup keys")),
ARGPARSE_s_s (oLDAPFile, "ldapserverlist-file",
N_("|FILE|read LDAP server list from FILE")),
ARGPARSE_s_n (oLDAPAddServers, "add-servers",
@@ -378,6 +381,11 @@ static int network_activity_seen;
/* A list of filenames registered with --hkp-cacert. */
static strlist_t hkp_cacert_filenames;
+/* A flag used to clear the list of ldapservers iff --ldapserver is
+ * given on the command line or one of the conf files. In this case we
+ * want to clear all old specifications through the legacy
+ * dirmngr_ldapservers.conf. */
+static int ldapserver_list_needs_reset;
/* The timer tick used for housekeeping stuff. The second constant is used when a shutdown is pending. */
#define TIMERTICK_INTERVAL (60)
@@ -671,6 +679,7 @@ parse_rereadable_options (gpgrt_argparse_t *pargs, int reread)
set_dns_timeout (0);
opt.connect_timeout = 0;
opt.connect_quick_timeout = 0;
+ ldapserver_list_needs_reset = 1;
return 1;
}
@@ -759,6 +768,30 @@ parse_rereadable_options (gpgrt_argparse_t *pargs, int reread)
case oStandardResolver: enable_standard_resolver (1); break;
case oRecursiveResolver: enable_recursive_resolver (1); break;
+ case oLDAPServer:
+ {
+ ldap_server_t server;
+ char *p;
+
+ p = pargs->r.ret_str;
+ if (!strncmp (p, "ldap:", 5) && !(p[5] == '/' && p[6] == '/'))
+ p += 5;
+
+ server = ldapserver_parse_one (p, NULL, 0);
+ if (server)
+ {
+ if (ldapserver_list_needs_reset)
+ {
+ ldapserver_list_needs_reset = 0;
+ ldapserver_list_free (opt.ldapservers);
+ opt.ldapservers = NULL;
+ }
+ server->next = opt.ldapservers;
+ opt.ldapservers = server;
+ }
+ }
+ break;
+
case oKeyServer:
if (*pargs->r.ret_str)
add_to_strlist (&opt.keyserver, pargs->r.ret_str);
@@ -1133,9 +1166,11 @@ main (int argc, char **argv)
if (cmd != aGPGConfTest && cmd != aGPGConfList && cmd != aGPGConfVersions)
set_tor_mode ();
- /* Get LDAP server list from file. */
+ /* Get LDAP server list from file unless --ldapserver has been used. */
#if USE_LDAP
- if (!ldapfile)
+ if (opt.ldapservers)
+ ;
+ else if (!ldapfile)
{
ldapfile = make_filename (gnupg_homedir (),
"dirmngr_ldapservers.conf",