47 #define G_LOG_DOMAIN "base gpgme" 49 static char *gpghome = NULL;
68 log_gpgme (GLogLevelFlags level, gpg_error_t
err,
const char *fmt, ...)
73 va_start (arg_ptr, fmt);
74 msg = g_strdup_vprintf (fmt, arg_ptr);
76 if (
err && gpg_err_source (
err) != GPG_ERR_SOURCE_ANY
77 && gpg_err_source (
err))
79 msg, gpg_strerror (
err), gpg_strsource (
err));
82 msg, gpg_strerror (
err));
104 static int initialized;
116 gpgme_engine_info_t info;
118 if (!gpgme_check_version (NULL))
120 g_critical (
"gpgme library could not be initialized.");
123 gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
125 gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
129 g_message (
"Setting GnuPG dir to '%s'", dir);
132 if (access (dir, F_OK))
134 err = gpg_error_from_syserror ();
138 if (mkdir (dir, 0700) == 0)
141 g_message (
"Created GnuPG dir '%s'", dir);
148 err = gpgme_set_engine_info (GPGME_PROTOCOL_OpenPGP, NULL, dir);
152 log_gpgme (G_LOG_LEVEL_WARNING,
err,
"Setting GnuPG dir failed");
157 if (!gpgme_get_engine_info (&info))
159 while (info && info->protocol != GPGME_PROTOCOL_OpenPGP)
165 g_message (
"Using OpenPGP engine version '%s'",
166 info && info->version? info->version:
"[?]");
175 err = gpgme_new (&ctx);
177 log_gpgme (G_LOG_LEVEL_WARNING,
err,
"Creating GPGME context failed");
198 determine_gpghome (
const gchar *subdir)
200 char *envdir = getenv (
"OPENVAS_GPGHOME");
203 return g_strdup (envdir);
205 return g_build_filename (OPENVAS_STATE_DIR, subdir,
"gnupg", NULL);
206 return g_build_filename (OPENVAS_STATE_DIR,
"gnupg", NULL);
229 path = determine_gpghome (subdir);
238 gpghome = g_strdup (path);
251 get_sysconf_gpghome (
void)
255 envdir = getenv (
"OPENVAS_GPGHOME");
257 return g_strdup (gpghome);
259 return g_strdup (envdir);
261 return g_build_filename (OPENVAS_SYSCONF_DIR,
"gnupg", NULL);
282 path = get_sysconf_gpghome ();
gpgme_ctx_t openvas_init_gpgme_ctx(const gchar *subdir)
Returns a new gpgme context.
gpgme_ctx_t openvas_init_gpgme_sysconf_ctx(void)
Returns a new gpgme context using the sycconf directory.
void set_gpghome(const char *path)
#define G_LOG_DOMAIN
GLib log domain.
gpgme_ctx_t openvas_init_gpgme_ctx_from_dir(const gchar *dir)
Returns a new gpgme context.
Protos and data structures for GPGME utilities.