1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-08 17:43:04 +01:00

* options.h, keyserver.c (curl_cant_handle, keyserver_spawn,

keyserver_fetch): Set a flag to indicate that we're doing a direct URI
fetch so we can differentiate between a keyserver operation and a URI
fetch for protocols like LDAP that can do either.
This commit is contained in:
David Shaw 2005-12-08 05:52:41 +00:00
parent 4ba9fd4683
commit 1d051e8ed5
3 changed files with 36 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2005-12-08 David Shaw <dshaw@jabberwocky.com>
* options.h, keyserver.c (curl_cant_handle, keyserver_spawn,
keyserver_fetch): Set a flag to indicate that we're doing a direct
URI fetch so we can differentiate between a keyserver operation
and a URI fetch for protocols like LDAP that can do either.
2005-12-07 David Shaw <dshaw@jabberwocky.com> 2005-12-07 David Shaw <dshaw@jabberwocky.com>
* keyserver.c (keyserver_spawn): Don't print "searching for key * keyserver.c (keyserver_spawn): Don't print "searching for key

View File

@ -867,9 +867,9 @@ keyserver_typemap(const char *type)
/* The PGP LDAP and the curl fetch-a-LDAP-object methodologies are /* The PGP LDAP and the curl fetch-a-LDAP-object methodologies are
sufficiently different that we can't use curl to do LDAP. */ sufficiently different that we can't use curl to do LDAP. */
static int static int
curl_cant_handle(const char *scheme) curl_cant_handle(const char *scheme,unsigned int direct_uri)
{ {
if(strcmp(scheme,"ldap")==0 || strcmp(scheme,"ldaps")==0) if(!direct_uri && (strcmp(scheme,"ldap")==0 || strcmp(scheme,"ldaps")==0))
return 1; return 1;
return 0; return 0;
@ -883,7 +883,7 @@ static int
keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc, keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
int count,int *prog,struct keyserver_spec *keyserver) int count,int *prog,struct keyserver_spec *keyserver)
{ {
int ret=0,i,gotversion=0,outofband=0,quiet=0; int ret=0,i,gotversion=0,outofband=0;
STRLIST temp; STRLIST temp;
unsigned int maxlen,buflen; unsigned int maxlen,buflen;
char *command,*end,*searchstr=NULL; char *command,*end,*searchstr=NULL;
@ -928,7 +928,7 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
/* If exec-path was set, and DISABLE_KEYSERVER_PATH is /* If exec-path was set, and DISABLE_KEYSERVER_PATH is
undefined, then don't specify a full path to gpgkeys_foo, so undefined, then don't specify a full path to gpgkeys_foo, so
that the PATH can work. */ that the PATH can work. */
command=xmalloc(GPGKEYS_PREFIX_LEN+strlen(scheme)+1); command=xmalloc(GPGKEYS_PREFIX_LEN+strlen(scheme)+3+1);
command[0]='\0'; command[0]='\0';
} }
else else
@ -936,7 +936,7 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
{ {
/* Specify a full path to gpgkeys_foo. */ /* Specify a full path to gpgkeys_foo. */
command=xmalloc(strlen(libexecdir)+strlen(DIRSEP_S)+ command=xmalloc(strlen(libexecdir)+strlen(DIRSEP_S)+
GPGKEYS_PREFIX_LEN+strlen(scheme)+1); GPGKEYS_PREFIX_LEN+strlen(scheme)+3+1);
strcpy(command,libexecdir); strcpy(command,libexecdir);
strcat(command,DIRSEP_S); strcat(command,DIRSEP_S);
} }
@ -946,8 +946,12 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
strcat(command,GPGKEYS_PREFIX); strcat(command,GPGKEYS_PREFIX);
strcat(command,scheme); strcat(command,scheme);
if(keyserver->flags.direct_uri)
strcat(command,"uri");
#ifdef GPGKEYS_CURL #ifdef GPGKEYS_CURL
if(!curl_cant_handle(scheme) && path_access(command,X_OK)!=0) if(!curl_cant_handle(scheme,keyserver->flags.direct_uri)
&& path_access(command,X_OK)!=0)
strcpy(end,GPGKEYS_CURL); strcpy(end,GPGKEYS_CURL);
#endif #endif
@ -1018,6 +1022,8 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
for(i=0;i<count;i++) for(i=0;i<count;i++)
{ {
int quiet=0;
if(desc[i].mode==KEYDB_SEARCH_MODE_FPR20) if(desc[i].mode==KEYDB_SEARCH_MODE_FPR20)
{ {
int f; int f;
@ -1829,10 +1835,22 @@ keyserver_fetch(STRLIST urilist)
spec=parse_keyserver_uri(sl->d,1,NULL,0); spec=parse_keyserver_uri(sl->d,1,NULL,0);
if(spec) if(spec)
{ {
int rc=keyserver_work(GET,NULL,&desc,1,spec); int rc;
/*
Set the direct_uri flag so we know later to call a direct
handler instead of the keyserver style. This lets us use
gpgkeys_curl or gpgkeys_ldapuri instead of gpgkeys_ldap to
fetch things like
ldap://keyserver.pgp.com/o=PGP%20keys?pgpkey?sub?pgpkeyid=99242560
*/
spec->flags.direct_uri=1;
rc=keyserver_work(GET,NULL,&desc,1,spec);
if(rc) if(rc)
log_info("WARNING: unable to fetch URI %s: %s\n", log_info("WARNING: unable to fetch URI %s: %s\n",
sl->d,g10_errstr(rc)); sl->d,g10_errstr(rc));
free_keyserver_spec(spec); free_keyserver_spec(spec);
} }
else else

View File

@ -134,6 +134,10 @@ struct
char *port; char *port;
char *path; char *path;
char *opaque; char *opaque;
struct
{
unsigned int direct_uri:1;
} flags;
} *keyserver; } *keyserver;
struct struct
{ {