diff options
author | Werner Koch <wk@gnupg.org> | 2014-03-11 14:26:39 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2014-03-11 16:30:36 +0100 |
commit | 3c35b46a32ac7584f3807b611cde78b199c527d6 (patch) | |
tree | 307b0b3fd3a15c58a1fb332d6a9ec2a00c32a79f /dirmngr/server.c | |
parent | List readline support in configure summary (diff) | |
download | gnupg2-3c35b46a32ac7584f3807b611cde78b199c527d6.tar.xz gnupg2-3c35b46a32ac7584f3807b611cde78b199c527d6.zip |
dirmngr: Fix HKP host selection code.
* dirmngr/server.c (cmd_keyserver): Add option --resolve and change
--print-hosttable to --hosttable.
* dirmngr/ks-action.c (ks_printf_help): New.
(ks_action_resolve): New.
* dirmngr/ks-engine-hkp.c (select_random_host): Fix selection.
(ks_hkp_print_hosttable): Print to assuan stream.
(map_host): Remove debug code. Add arg FORCE_SELECT. Return numeric
IP addr if it can't be resolved.
(make_host_part): Add arg FORCE_SELECT; change callers to pass false.
(ks_hkp_resolve): New.
--
The new options for the keyserver command are useful for debugging.
For example:
$ tools/gpg-connect-agent -S /usr/local/var/run/gnupg/S.dirmngr \
'keyserver hkp://keys.gnupg.net' \
'keyserver http://http-keys.gnupg.net' \
'keyserver --resolve --hosttable' /bye
yields:
OK
OK
S # http://astrath.net:80
S # http://2001:41d0:1:e673::1:11371
S # hosttable (idx, ipv4, ipv6, dead, name):
S # 0 http-keys.gnupg.net
S # . --> 10 11 12 1 5 8 7 4* 2 9 6 3
S # 1 4 37.250.168.245.bredband.tre.se
S # 2 4 6 keys.exosphere.de
S # 3 4 6 poseidon.muc.drweb-av.de
S # 4 4 astrath.net
S # 5 4 79.143.214.216
S # 6 4 openpgp.andrew.kvalhe.im
S # 7 4 app.aaiedu.hr
S # 8 4 6 alita.karotte.org
S # 9 4 6 keyserver.bau5net.com
S # 10 4 194.94.127.122
S # 11 6 2001:4d88:1ffc:477::7
S # 12 6 2a00:1280:8000:2:1:8:0:1
S # 13 keys.gnupg.net
S # . --> 23 28* 30 17 22 8 7 27 25 14 21 20 19 29 [...]
S # 14 4 hufu.ki.iif.hu
S # 15 4 pks.ms.mff.cuni.cz
S # 16 4 pgpkeys.co.uk
S # 17 4 80-239-156-219.customer.teliacarrier.com
S # 18 4 srv01.secure-u.de
S # 19 4 mallos.xs4all.nl
S # 20 4 kronecker.scientia.net
S # 21 4 keyserver.ut.mephi.ru
S # 22 4 89-68-150-88.dynamic.chello.pl
S # 23 6 2001:1608:21:6:84:200:66:125
S # 24 6 sks.es.net
S # 25 6 gstueve-1-pt.tunnel.tserv13.ash1.ipv6.he.net
S # 26 6 sks.mrball.net
S # 27 6 gozer.rediris.es
S # 28 6 2001:41d0:1:e673::1
S # 29 6 oteiza.siccegge.de
S # 30 6 2403:4200:401:10::13
S # 31 6 statler.serviz.fr
OK
Diffstat (limited to '')
-rw-r--r-- | dirmngr/server.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/dirmngr/server.c b/dirmngr/server.c index 6d7723ab7..9a0244195 100644 --- a/dirmngr/server.c +++ b/dirmngr/server.c @@ -1,15 +1,16 @@ -/* dirmngr.c - LDAP access - * Copyright (C) 2002 Klarälvdalens Datakonsult AB - * Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2011 g10 Code GmbH +/* server.c - LDAP and Keyserver access server + * Copyright (C) 2002 Klarälvdalens Datakonsult AB + * Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2011 g10 Code GmbH + * Copyright (C) 2014 Werner Koch * - * This file is part of DirMngr. + * This file is part of GnuPG. * - * DirMngr is free software; you can redistribute it and/or modify + * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * - * DirMngr is distributed in the hope that it will be useful, + * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. @@ -120,6 +121,7 @@ release_ctrl_keyservers (ctrl_t ctrl) /* Helper to print a message while leaving a command. */ static gpg_error_t leave_cmd (assuan_context_t ctx, gpg_error_t err) + { if (err) { @@ -1374,14 +1376,15 @@ static gpg_error_t cmd_keyserver (assuan_context_t ctx, char *line) { ctrl_t ctrl = assuan_get_pointer (ctx); - gpg_error_t err; - int clear_flag, add_flag, help_flag, host_flag; + gpg_error_t err = 0; + int clear_flag, add_flag, help_flag, host_flag, resolve_flag; uri_item_t item = NULL; /* gcc 4.4.5 is not able to detect that it is always initialized. */ clear_flag = has_option (line, "--clear"); help_flag = has_option (line, "--help"); - host_flag = has_option (line, "--print-hosttable"); + resolve_flag = has_option (line, "--resolve"); + host_flag = has_option (line, "--hosttable"); line = skip_options (line); add_flag = !!*line; @@ -1391,12 +1394,21 @@ cmd_keyserver (assuan_context_t ctx, char *line) goto leave; } + if (resolve_flag) + { + err = ks_action_resolve (ctrl); + if (err) + goto leave; + } + if (host_flag) { - ks_hkp_print_hosttable (); - err = 0; - goto leave; + err = ks_hkp_print_hosttable (ctrl); + if (err) + goto leave; } + if (resolve_flag || host_flag) + goto leave; if (add_flag) { |