mirror of
git://git.gnupg.org/gnupg.git
synced 2025-05-24 16:43:28 +02:00
* Makefile.am: No need to link with curl any longer.
* main.h, misc.c (path_access): New. Same as access() but does a PATH search like execlp. * keyserver.c (curl_can_handle): Removed. Replaced by... (curl_cant_handle): We are now relying on curl as the handler of last resort. This is necessary because PGP LDAP and curl LDAP are apples and oranges. (keyserver_typemap): Only test for ldap and ldaps. (keyserver_spawn): If a given handler is unusable (as determined by path_access()) then try gpgkeys_curl.
This commit is contained in:
parent
2e8c02b54b
commit
24adfe678d
@ -1,5 +1,18 @@
|
|||||||
2005-08-21 David Shaw <dshaw@jabberwocky.com>
|
2005-08-21 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
|
* Makefile.am: No need to link with curl any longer.
|
||||||
|
|
||||||
|
* main.h, misc.c (path_access): New. Same as access() but does a
|
||||||
|
PATH search like execlp.
|
||||||
|
|
||||||
|
* keyserver.c (curl_can_handle): Removed. Replaced by...
|
||||||
|
(curl_cant_handle): We are now relying on curl as the handler of
|
||||||
|
last resort. This is necessary because PGP LDAP and curl LDAP are
|
||||||
|
apples and oranges.
|
||||||
|
(keyserver_typemap): Only test for ldap and ldaps.
|
||||||
|
(keyserver_spawn): If a given handler is unusable (as determined
|
||||||
|
by path_access()) then try gpgkeys_curl.
|
||||||
|
|
||||||
* exec.h, exec.c (make_tempdir, expand_args, exec_write,
|
* exec.h, exec.c (make_tempdir, expand_args, exec_write,
|
||||||
exec_read): Minor cleanup to use bitfield flags instead of a bunch
|
exec_read): Minor cleanup to use bitfield flags instead of a bunch
|
||||||
of integers.
|
of integers.
|
||||||
|
@ -124,8 +124,7 @@ gpgv_SOURCES = gpgv.c \
|
|||||||
verify.c
|
verify.c
|
||||||
|
|
||||||
LDADD = $(needed_libs) $(other_libs) @ZLIBS@ @W32LIBS@ @LIBREADLINE@
|
LDADD = $(needed_libs) $(other_libs) @ZLIBS@ @W32LIBS@ @LIBREADLINE@
|
||||||
gpg_LDADD = $(LDADD) @DLLIBS@ @NETLIBS@ @LIBUSB@ @LIBCURL@
|
gpg_LDADD = $(LDADD) @DLLIBS@ @NETLIBS@ @LIBUSB@
|
||||||
##gpg_CPPFLAGS = @LIBCURL_CPPFLAGS@
|
|
||||||
|
|
||||||
$(PROGRAMS): $(needed_libs)
|
$(PROGRAMS): $(needed_libs)
|
||||||
|
|
||||||
|
@ -49,6 +49,16 @@
|
|||||||
|
|
||||||
#define GPGKEYS_PREFIX "gpgkeys_"
|
#define GPGKEYS_PREFIX "gpgkeys_"
|
||||||
|
|
||||||
|
#if defined(HAVE_LIBCURL) || defined(FAKE_CURL)
|
||||||
|
#define GPGKEYS_CURL "gpgkeys_curl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GPGKEYS_CURL
|
||||||
|
#define GPGKEYS_PREFIX_LEN (strlen(GPGKEYS_PREFIX)+strlen(GPGKEYS_CURL))
|
||||||
|
#else
|
||||||
|
#define GPGKEYS_PREFIX_LEN (strlen(GPGKEYS_PREFIX))
|
||||||
|
#endif
|
||||||
|
|
||||||
struct keyrec
|
struct keyrec
|
||||||
{
|
{
|
||||||
KEYDB_SEARCH_DESC desc;
|
KEYDB_SEARCH_DESC desc;
|
||||||
@ -830,47 +840,29 @@ keyserver_search_prompt(IOBUF buffer,const char *searchstr)
|
|||||||
xfree(line);
|
xfree(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
curl_can_handle(const char *scheme)
|
|
||||||
{
|
|
||||||
#if defined(HAVE_LIBCURL)
|
|
||||||
|
|
||||||
const char * const *proto;
|
|
||||||
curl_version_info_data *data=curl_version_info(CURLVERSION_NOW);
|
|
||||||
|
|
||||||
assert(data);
|
|
||||||
|
|
||||||
for(proto=data->protocols;*proto;proto++)
|
|
||||||
if(strcasecmp(*proto,scheme)==0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
#elif defined(FAKE_CURL)
|
|
||||||
|
|
||||||
/* If we're faking curl, then we only support HTTP */
|
|
||||||
if(strcasecmp(scheme,"http")==0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We sometimes want to use a different gpgkeys_xxx for a given
|
/* We sometimes want to use a different gpgkeys_xxx for a given
|
||||||
protocol (for example, ldaps is handled by gpgkeys_ldap). Map
|
protocol (for example, ldaps is handled by gpgkeys_ldap). Map
|
||||||
these here. */
|
these here. */
|
||||||
static const char *
|
static const char *
|
||||||
keyserver_typemap(const char *type)
|
keyserver_typemap(const char *type)
|
||||||
{
|
{
|
||||||
if(strcmp(type,"ldap")==0)
|
if(strcmp(type,"ldaps")==0)
|
||||||
return "ldap";
|
return "ldap";
|
||||||
else if(strcmp(type,"ldaps")==0)
|
|
||||||
return "ldap";
|
|
||||||
else if(curl_can_handle(type))
|
|
||||||
return "curl";
|
|
||||||
else
|
else
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef GPGKEYS_CURL
|
||||||
|
static int
|
||||||
|
curl_cant_handle(const char *scheme)
|
||||||
|
{
|
||||||
|
if(strcmp(scheme,"ldap")==0 || strcmp(scheme,"ldaps")==0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
|
#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
|
||||||
#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
|
#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
|
||||||
|
|
||||||
@ -881,7 +873,7 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
|
|||||||
int ret=0,i,gotversion=0,outofband=0;
|
int ret=0,i,gotversion=0,outofband=0;
|
||||||
STRLIST temp;
|
STRLIST temp;
|
||||||
unsigned int maxlen,buflen;
|
unsigned int maxlen,buflen;
|
||||||
char *command,*searchstr=NULL;
|
char *command,*end,*searchstr=NULL;
|
||||||
byte *line=NULL;
|
byte *line=NULL;
|
||||||
struct parse_options *kopts;
|
struct parse_options *kopts;
|
||||||
struct exec_info *spawn;
|
struct exec_info *spawn;
|
||||||
@ -923,7 +915,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(strlen(GPGKEYS_PREFIX)+strlen(scheme)+1);
|
command=xmalloc(GPGKEYS_PREFIX_LEN+strlen(scheme)+1);
|
||||||
command[0]='\0';
|
command[0]='\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -931,14 +923,21 @@ 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)+
|
||||||
strlen(GPGKEYS_PREFIX)+strlen(scheme)+1);
|
GPGKEYS_PREFIX_LEN+strlen(scheme)+1);
|
||||||
strcpy(command,libexecdir);
|
strcpy(command,libexecdir);
|
||||||
strcat(command,DIRSEP_S);
|
strcat(command,DIRSEP_S);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end=command+strlen(command);
|
||||||
|
|
||||||
strcat(command,GPGKEYS_PREFIX);
|
strcat(command,GPGKEYS_PREFIX);
|
||||||
strcat(command,scheme);
|
strcat(command,scheme);
|
||||||
|
|
||||||
|
#ifdef GPGKEYS_CURL
|
||||||
|
if(!curl_cant_handle(scheme) && path_access(command,X_OK)!=0)
|
||||||
|
strcpy(end,GPGKEYS_CURL);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(opt.keyserver_options.options&KEYSERVER_USE_TEMP_FILES)
|
if(opt.keyserver_options.options&KEYSERVER_USE_TEMP_FILES)
|
||||||
{
|
{
|
||||||
if(opt.keyserver_options.options&KEYSERVER_KEEP_TEMP_FILES)
|
if(opt.keyserver_options.options&KEYSERVER_KEEP_TEMP_FILES)
|
||||||
|
@ -129,7 +129,7 @@ int has_invalid_email_chars (const char *s);
|
|||||||
int is_valid_mailbox (const char *name);
|
int is_valid_mailbox (const char *name);
|
||||||
char *default_homedir (void);
|
char *default_homedir (void);
|
||||||
const char *get_libexecdir (void);
|
const char *get_libexecdir (void);
|
||||||
|
int path_access(const char *file,int mode);
|
||||||
|
|
||||||
/*-- helptext.c --*/
|
/*-- helptext.c --*/
|
||||||
void display_online_help( const char *keyword );
|
void display_online_help( const char *keyword );
|
||||||
|
39
g10/misc.c
39
g10/misc.c
@ -1,6 +1,6 @@
|
|||||||
/* misc.c - miscellaneous functions
|
/* misc.c - miscellaneous functions
|
||||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
|
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
* 2004, 2005 Free Software Foundation, Inc.
|
* 2005 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -1223,3 +1223,38 @@ get_libexecdir (void)
|
|||||||
|
|
||||||
return GNUPG_LIBEXECDIR;
|
return GNUPG_LIBEXECDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
path_access(const char *file,int mode)
|
||||||
|
{
|
||||||
|
char *envpath;
|
||||||
|
int ret=-1;
|
||||||
|
|
||||||
|
envpath=getenv("PATH");
|
||||||
|
|
||||||
|
if(file[0]=='/' || !envpath)
|
||||||
|
return access(file,mode);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* At least as large as, but most often larger than we need. */
|
||||||
|
char *buffer=xmalloc(strlen(envpath)+1+strlen(file)+1);
|
||||||
|
char *split,*item,*path=xstrdup(envpath);
|
||||||
|
|
||||||
|
split=path;
|
||||||
|
|
||||||
|
while((item=strsep(&split,PATHSEP_S)))
|
||||||
|
{
|
||||||
|
strcpy(buffer,item);
|
||||||
|
strcat(buffer,"/");
|
||||||
|
strcat(buffer,file);
|
||||||
|
ret=access(buffer,mode);
|
||||||
|
if(ret==0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
xfree(path);
|
||||||
|
xfree(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user