Changeset View
Changeset View
Standalone View
Standalone View
src/engine-gpg.c
Show First 20 Lines • Show All 144 Lines • ▼ Show 20 Lines | struct engine_gpg | ||||
struct { | struct { | ||||
unsigned int no_symkey_cache : 1; | unsigned int no_symkey_cache : 1; | ||||
unsigned int offline : 1; | unsigned int offline : 1; | ||||
unsigned int ignore_mdc_error : 1; | unsigned int ignore_mdc_error : 1; | ||||
} flags; | } flags; | ||||
/* NULL or the data object fed to --override_session_key-fd. */ | /* NULL or the data object fed to --override_session_key-fd. */ | ||||
gpgme_data_t override_session_key; | gpgme_data_t override_session_key; | ||||
/* Memory data containing diagnostics (--logger-fd) of gpg */ | |||||
gpgme_data_t diagnostics; | |||||
}; | }; | ||||
typedef struct engine_gpg *engine_gpg_t; | typedef struct engine_gpg *engine_gpg_t; | ||||
␌ | ␌ | ||||
static void | static void | ||||
gpg_io_event (void *engine, gpgme_event_io_t type, void *type_data) | gpg_io_event (void *engine, gpgme_event_io_t type, void *type_data) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 287 Lines • ▼ Show 20 Lines | gpg_release (void *engine) | ||||
if (gpg->colon.buffer) | if (gpg->colon.buffer) | ||||
free (gpg->colon.buffer); | free (gpg->colon.buffer); | ||||
if (gpg->argv) | if (gpg->argv) | ||||
free_argv (gpg->argv); | free_argv (gpg->argv); | ||||
if (gpg->cmd.keyword) | if (gpg->cmd.keyword) | ||||
free (gpg->cmd.keyword); | free (gpg->cmd.keyword); | ||||
gpgme_data_release (gpg->override_session_key); | gpgme_data_release (gpg->override_session_key); | ||||
gpgme_data_release (gpg->diagnostics); | |||||
free (gpg); | free (gpg); | ||||
} | } | ||||
static gpgme_error_t | static gpgme_error_t | ||||
gpg_new (void **engine, const char *file_name, const char *home_dir, | gpg_new (void **engine, const char *file_name, const char *home_dir, | ||||
const char *version) | const char *version) | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | goto leave; | ||||
free (dft_ttytype); | free (dft_ttytype); | ||||
} | } | ||||
if (rc) | if (rc) | ||||
goto leave; | goto leave; | ||||
} | } | ||||
} | } | ||||
rc = gpgme_data_new (&gpg->diagnostics); | |||||
if (rc) | |||||
goto leave; | |||||
rc = add_arg (gpg, "--logger-fd"); | |||||
if (rc) | |||||
goto leave; | |||||
rc = add_data (gpg, gpg->diagnostics, -2, 1); | |||||
leave: | leave: | ||||
if (rc) | if (rc) | ||||
gpg_release (gpg); | gpg_release (gpg); | ||||
else | else | ||||
*engine = gpg; | *engine = gpg; | ||||
return rc; | return rc; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,631 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
engine_gpg_t gpg = engine; | engine_gpg_t gpg = engine; | ||||
gpg->pinentry_mode = mode; | gpg->pinentry_mode = mode; | ||||
return 0; | return 0; | ||||
} | } | ||||
static gpgme_error_t | |||||
gpg_getauditlog (void *engine, gpgme_data_t output, unsigned int flags) | |||||
{ | |||||
engine_gpg_t gpg = engine; | |||||
#define MYBUFLEN 4096 | |||||
char buf[MYBUFLEN]; | |||||
int nread; | |||||
if (!(flags & GPGME_AUDITLOG_DIAG)) | |||||
{ | |||||
return gpg_error (GPG_ERR_NOT_IMPLEMENTED); | |||||
} | |||||
if (!gpg || !output) | |||||
{ | |||||
return gpg_error (GPG_ERR_INV_VALUE); | |||||
} | |||||
if (!gpg->diagnostics) | |||||
{ | |||||
return gpg_error (GPG_ERR_GENERAL); | |||||
} | |||||
gpgme_data_rewind (gpg->diagnostics); | |||||
while ((nread = gpgme_data_read (gpg->diagnostics, buf, MYBUFLEN)) > 0) | |||||
{ | |||||
if (gpgme_data_write (output, buf, nread) == -1) | |||||
return gpg_error_from_syserror (); | |||||
} | |||||
if (nread == -1) | |||||
return gpg_error_from_syserror (); | |||||
gpgme_data_rewind (output); | |||||
return 0; | |||||
#undef MYBUFLEN | |||||
} | |||||
␌ | ␌ | ||||
struct engine_ops _gpgme_engine_ops_gpg = | struct engine_ops _gpgme_engine_ops_gpg = | ||||
{ | { | ||||
/* Static functions. */ | /* Static functions. */ | ||||
_gpgme_get_default_gpg_name, | _gpgme_get_default_gpg_name, | ||||
NULL, | NULL, | ||||
gpg_get_version, | gpg_get_version, | ||||
gpg_get_req_version, | gpg_get_req_version, | ||||
Show All 21 Lines | struct engine_ops _gpgme_engine_ops_gpg = | ||||
gpg_keylist, | gpg_keylist, | ||||
gpg_keylist_ext, | gpg_keylist_ext, | ||||
gpg_keylist_data, | gpg_keylist_data, | ||||
gpg_keysign, | gpg_keysign, | ||||
gpg_tofu_policy, /* tofu_policy */ | gpg_tofu_policy, /* tofu_policy */ | ||||
gpg_sign, | gpg_sign, | ||||
gpg_trustlist, | gpg_trustlist, | ||||
gpg_verify, | gpg_verify, | ||||
NULL, /* getauditlog */ | gpg_getauditlog, | ||||
NULL, /* opassuan_transact */ | NULL, /* opassuan_transact */ | ||||
NULL, /* conf_load */ | NULL, /* conf_load */ | ||||
NULL, /* conf_save */ | NULL, /* conf_save */ | ||||
NULL, /* conf_dir */ | NULL, /* conf_dir */ | ||||
NULL, /* query_swdb */ | NULL, /* query_swdb */ | ||||
gpg_set_io_cbs, | gpg_set_io_cbs, | ||||
gpg_io_event, | gpg_io_event, | ||||
gpg_cancel, | gpg_cancel, | ||||
NULL, /* cancel_op */ | NULL, /* cancel_op */ | ||||
gpg_passwd, | gpg_passwd, | ||||
gpg_set_pinentry_mode, | gpg_set_pinentry_mode, | ||||
NULL /* opspawn */ | NULL /* opspawn */ | ||||
}; | }; |