aboutsummaryrefslogtreecommitdiffstats
path: root/src/posix-util.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2013-12-27 15:08:20 +0000
committerWerner Koch <[email protected]>2013-12-27 15:08:20 +0000
commit02ba35c1b6a2cbb3361b2f2ad507c53564b2be0b (patch)
treec2286910441497fa7af0debbeca2da61f61617d0 /src/posix-util.c
parentDocument API change for GPGME_EVENT_DONE from 2009. (diff)
downloadgpgme-02ba35c1b6a2cbb3361b2f2ad507c53564b2be0b.tar.gz
gpgme-02ba35c1b6a2cbb3361b2f2ad507c53564b2be0b.zip
Locate engine names only at runtime and prefer GnuPG-2.
* configure.ac (NEED_GPG_VERSION, NEED_GPGSM_VERSION) (NEED_G13_VERSION, NEED_GPGCONF_VERSION): Remove vars and all related checks. Do not check for any engine version. (HAVE_ASSUAN): Remove AM conditional. * src/Makefile.am: Remove separate component vars and always build all engines but uiserver. * src/dirinfo.c (WANT_GPGCONF_NAME): New. (struct dirinfo): Add field gpgconf_name. (_gpgme_get_default_gpgconf_name): Use WANT_GPGCONF_NAME. (get_gpgconf_item): Set gpgconf name and adjust for _gpgme_get_*_path now returning a malloced string. * src/engine.c (engine_ops): Always init all engines except for uiserver. * src/posix-util.c (_gpgme_get_gpgsm_path, _gpgme_get_g13_path): Remove unused functions. (walk_path): New. (_gpgme_get_gpg_path, _gpgme_get_gpgconf_path ): Re-implement using walk_path. * src/w32-util.c (_gpgme_get_gpgsm_path, _gpgme_get_g13_path): Remove unused functions. (_gpgme_get_gpg_path, _gpgme_get_gpgconf_path): Return a malloced string. * src/engine-g13.c (g13_get_req_version): Use a hardwired string with the required version. This info belongs into this file. * src/engine-gpg.c (gpg_get_req_version): Ditto. * src/engine-gpgconf.c (gpgconf_get_req_version): Ditto. * src/engine-gpgsm.c (gpgsm_get_req_version): Ditto. * tests/t-engine-info.c: Replace now useless test by an info output. * tests/gpg/Makefile.am (GPG, GPG_AGENT): Hardwire gpg and gpg-agent. * tests/gpgsm/Makefile.am (GPGSM): Hardwire gpgsm. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/posix-util.c')
-rw-r--r--src/posix-util.c73
1 files changed, 43 insertions, 30 deletions
diff --git a/src/posix-util.c b/src/posix-util.c
index fd445070..d4e4e3f4 100644
--- a/src/posix-util.c
+++ b/src/posix-util.c
@@ -30,47 +30,60 @@
#include "util.h"
#include "sys-util.h"
-const char *
-_gpgme_get_gpg_path (void)
-{
-#ifdef GPG_PATH
- return GPG_PATH;
-#else
- return NULL;
-#endif
-}
-const char *
-_gpgme_get_gpgsm_path (void)
+/* Find an executable program PGM along the envvar PATH. */
+static char *
+walk_path (const char *pgm)
{
-#ifdef GPGSM_PATH
- return GPGSM_PATH;
-#else
+ const char *path, *s;
+ char *fname, *p;
+
+ path = getenv ("PATH");
+ if (!path)
+ path = "/bin:/usr/bin:.";
+
+ fname = malloc (strlen (path) + 1 + strlen (pgm) + 1);
+ if (!fname)
+ return NULL;
+
+ for (;;)
+ {
+ for (s=path, p=fname; *s && *s != ':'; s++, p++)
+ *p = *s;
+ if (*p != '/')
+ *p++ = '/';
+ strcpy (p, pgm);
+ if (!access (fname, X_OK))
+ return fname;
+ if (!*s)
+ break;
+ path = s + 1;
+ }
+
+ free (fname);
return NULL;
-#endif
}
-const char *
-_gpgme_get_gpgconf_path (void)
+
+/* Return the full file name of the GPG binary. This function is used
+ if gpgconf was not found and thus it can be assumed that gpg2 is
+ not installed. This function is only called by get_gpgconf_item
+ and may not be called concurrently. */
+char *
+_gpgme_get_gpg_path (void)
{
-#ifdef GPGCONF_PATH
- return GPGCONF_PATH;
-#else
- return NULL;
-#endif
+ return walk_path ("gpg");
}
-const char *
-_gpgme_get_g13_path (void)
+
+/* This function is only called by get_gpgconf_item and may not be
+ called concurrently. */
+char *
+_gpgme_get_gpgconf_path (void)
{
-#ifdef G13_PATH
- return G13_PATH;
-#else
- return NULL;
-#endif
+ return walk_path ("gpgconf");
}
-
/* See w32-util.c */
int
_gpgme_get_conf_int (const char *key, int *value)