diff options
author | David Shaw <[email protected]> | 2006-02-22 23:37:23 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2006-02-22 23:37:23 +0000 |
commit | 1ae024ef81d108c68d00a96fca6f808b4a9c454d (patch) | |
tree | cf9ea77a36a9d3096eed336ba148a2426559245b | |
parent | * gpgkeys_hkp.c (get_name): A GETNAME query turns exact=on to cut down on (diff) | |
download | gnupg-1ae024ef81d108c68d00a96fca6f808b4a9c454d.tar.gz gnupg-1ae024ef81d108c68d00a96fca6f808b4a9c454d.zip |
* options.h, keyserver-internal.h, keyserver.c (keyserver_import_name),
getkey.c (free_akl, parse_auto_key_locate, get_pubkey_byname): The obvious
next step: allow arbitrary keyservers in the auto-key-locate list.
-rw-r--r-- | g10/ChangeLog | 5 | ||||
-rw-r--r-- | g10/getkey.c | 35 | ||||
-rw-r--r-- | g10/gpgv.c | 5 | ||||
-rw-r--r-- | g10/keyserver-internal.h | 2 | ||||
-rw-r--r-- | g10/keyserver.c | 4 | ||||
-rw-r--r-- | g10/options.h | 3 |
6 files changed, 45 insertions, 9 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog index 4660e9df2..ffc38deaa 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,5 +1,10 @@ 2006-02-22 David Shaw <[email protected]> + * options.h, keyserver-internal.h, keyserver.c + (keyserver_import_name), getkey.c (free_akl, + parse_auto_key_locate, get_pubkey_byname): The obvious next step: + allow arbitrary keyservers in the auto-key-locate list. + * options.h, keyserver.c (parse_keyserver_options): Remove auto-cert-retrieve as it is no longer meaningful. Add max-cert-size to allow users to pick a max key size retrieved via diff --git a/g10/getkey.c b/g10/getkey.c index 7d91cde1a..81b15b2e2 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -979,7 +979,7 @@ get_pubkey_byname (PKT_public_key *pk, if(opt.keyserver) { glo_ctrl.in_auto_key_retrieve++; - res=keyserver_import_name(name); + res=keyserver_import_name(name,opt.keyserver); glo_ctrl.in_auto_key_retrieve--; if(res==0) @@ -987,6 +987,16 @@ get_pubkey_byname (PKT_public_key *pk, name,opt.keyserver->uri); } break; + + case AKL_SPEC: + glo_ctrl.in_auto_key_retrieve++; + res=keyserver_import_name(name,akl->spec); + glo_ctrl.in_auto_key_retrieve--; + + if(res==0) + log_info(_("Automatically retrieved `%s' via %s\n"), + name,akl->spec->uri); + break; } rc = key_byname( NULL, namelist, pk, NULL, 0, @@ -2879,6 +2889,15 @@ get_ctx_handle(GETKEY_CTX ctx) return ctx->kr_handle; } +static void +free_akl(struct akl *akl) +{ + if(akl->spec) + free_keyserver_spec(akl->spec); + + xfree(akl); +} + int parse_auto_key_locate(char *options) { @@ -2901,9 +2920,11 @@ parse_auto_key_locate(char *options) akl->type=AKL_LDAP; else if(ascii_strcasecmp(tok,"keyserver")==0) akl->type=AKL_KEYSERVER; + else if((akl->spec=parse_keyserver_uri(tok,1,NULL,0))) + akl->type=AKL_SPEC; else { - xfree(akl); + free_akl(akl); return 0; } @@ -2911,8 +2932,14 @@ parse_auto_key_locate(char *options) for(last=opt.auto_key_locate;last && last->next;last=last->next) { /* Check for duplicates */ - if(last && last->type==akl->type) - return 0; + if(last && last->type==akl->type + && (akl->type!=AKL_SPEC + || (akl->type==AKL_SPEC + && strcmp(last->spec->uri,akl->spec->uri)==0))) + { + free_akl(akl); + return 0; + } } if(last) diff --git a/g10/gpgv.c b/g10/gpgv.c index 2f4563e2a..1644461ec 100644 --- a/g10/gpgv.c +++ b/g10/gpgv.c @@ -287,7 +287,10 @@ int keyserver_import_pka(const char *name,unsigned char *fpr) { return -1; } int -keyserver_import_name(const char *name) { return -1; } +keyserver_import_name(const char *name,struct keyserver_spec *spec) +{ + return -1; +} int keyserver_import_ldap(const char *name) { return -1; } diff --git a/g10/keyserver-internal.h b/g10/keyserver-internal.h index 856f3f3ee..ed5fdceb1 100644 --- a/g10/keyserver-internal.h +++ b/g10/keyserver-internal.h @@ -43,7 +43,7 @@ int keyserver_search(STRLIST tokens); int keyserver_fetch(STRLIST urilist); int keyserver_import_cert(const char *name); int keyserver_import_pka(const char *name,unsigned char *fpr); -int keyserver_import_name(const char *name); +int keyserver_import_name(const char *name,struct keyserver_spec *keyserver); int keyserver_import_ldap(const char *name); #endif /* !_KEYSERVER_INTERNAL_H_ */ diff --git a/g10/keyserver.c b/g10/keyserver.c index d9ed7ebbc..bf3ce2149 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -2001,14 +2001,14 @@ keyserver_import_pka(const char *name,unsigned char *fpr) /* Import all keys that match name */ int -keyserver_import_name(const char *name) +keyserver_import_name(const char *name,struct keyserver_spec *keyserver) { STRLIST list=NULL; int rc; append_to_strlist(&list,name); - rc=keyserver_work(KS_GETNAME,list,NULL,0,opt.keyserver); + rc=keyserver_work(KS_GETNAME,list,NULL,0,keyserver); free_strlist(list); diff --git a/g10/options.h b/g10/options.h index d60924187..b1b0cfde9 100644 --- a/g10/options.h +++ b/g10/options.h @@ -224,7 +224,8 @@ struct keyring. */ struct akl { - enum {AKL_CERT, AKL_PKA, AKL_LDAP, AKL_KEYSERVER} type; + enum {AKL_CERT, AKL_PKA, AKL_LDAP, AKL_KEYSERVER, AKL_SPEC} type; + struct keyserver_spec *spec; struct akl *next; } *auto_key_locate; |