diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/engine-assuan.c | 1 | ||||
| -rw-r--r-- | src/engine-backend.h | 1 | ||||
| -rw-r--r-- | src/engine-g13.c | 1 | ||||
| -rw-r--r-- | src/engine-gpg.c | 1 | ||||
| -rw-r--r-- | src/engine-gpgconf.c | 43 | ||||
| -rw-r--r-- | src/engine-gpgsm.c | 1 | ||||
| -rw-r--r-- | src/engine-spawn.c | 1 | ||||
| -rw-r--r-- | src/engine-uiserver.c | 1 | ||||
| -rw-r--r-- | src/engine.c | 13 | ||||
| -rw-r--r-- | src/engine.h | 3 | ||||
| -rw-r--r-- | src/gpgconf.c | 21 | ||||
| -rw-r--r-- | src/gpgme.def | 2 | ||||
| -rw-r--r-- | src/gpgme.h.in | 4 | ||||
| -rw-r--r-- | src/libgpgme.vers | 1 | 
14 files changed, 94 insertions, 0 deletions
| diff --git a/src/engine-assuan.c b/src/engine-assuan.c index 68bdaa6a..bb2290ac 100644 --- a/src/engine-assuan.c +++ b/src/engine-assuan.c @@ -796,6 +796,7 @@ struct engine_ops _gpgme_engine_ops_assuan =      llass_transact,     /* opassuan_transact */      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      llass_set_io_cbs,      llass_io_event, diff --git a/src/engine-backend.h b/src/engine-backend.h index 90328ecb..f41aaeb6 100644 --- a/src/engine-backend.h +++ b/src/engine-backend.h @@ -128,6 +128,7 @@ struct engine_ops    gpgme_error_t  (*conf_load) (void *engine, gpgme_conf_comp_t *conf_p);    gpgme_error_t  (*conf_save) (void *engine, gpgme_conf_comp_t conf); +  gpgme_error_t  (*conf_dir) (void *engine, const char *what, char **result);    gpgme_error_t  (*query_swdb) (void *engine,                                  const char *name, const char *iversion, diff --git a/src/engine-g13.c b/src/engine-g13.c index 02951e83..f8f31780 100644 --- a/src/engine-g13.c +++ b/src/engine-g13.c @@ -811,6 +811,7 @@ struct engine_ops _gpgme_engine_ops_g13 =      g13_transact,      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      g13_set_io_cbs,      g13_io_event, diff --git a/src/engine-gpg.c b/src/engine-gpg.c index c749c972..bc60d82d 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -3093,6 +3093,7 @@ struct engine_ops _gpgme_engine_ops_gpg =      NULL,               /* opassuan_transact */      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      gpg_set_io_cbs,      gpg_io_event, diff --git a/src/engine-gpgconf.c b/src/engine-gpgconf.c index af5f1103..2b0f448a 100644 --- a/src/engine-gpgconf.c +++ b/src/engine-gpgconf.c @@ -986,6 +986,48 @@ gpgconf_conf_save (void *engine, gpgme_conf_comp_t comp)  } +static gpgme_error_t +gpgconf_config_dir_cb (void *hook, char *line) +{ +  /* This is an input- and output-parameter.  */ +  char **str_p = (char **) hook; +  char *what = *str_p; +  int len = strlen(what); + +  if (!strncmp(line, what, len) && line[len] == ':') +    { +      char *result = strdup(&line[len + 1]); +      if (!result) +	return gpg_error_from_syserror (); +      *str_p = result; +      return gpg_error(GPG_ERR_USER_1); +    } +  return 0; +} + + +static gpgme_error_t +gpgconf_conf_dir (void *engine, const char *what, char **result) +{ +  gpgme_error_t err; +  char *res = what; + +  *result = NULL; +  err = gpgconf_read (engine, "--list-dirs", NULL, +		      gpgconf_config_dir_cb, &res); +  if (gpg_err_code (err) == GPG_ERR_USER_1) +    { +      /* This signals to use that a result was found.  */ +      *result = res; +      return 0; +    } + +  if (!err) +    err = gpg_error(GPG_ERR_NOT_FOUND); +  return 0; +} + +  /* Parse a line received from gpgconf --query-swdb.  This function may   * modify LINE.  The result is stored at RESUL.  */  static gpg_error_t @@ -1254,6 +1296,7 @@ struct engine_ops _gpgme_engine_ops_gpgconf =      NULL,               /* opassuan_transact */      gpgconf_conf_load,      gpgconf_conf_save, +    gpgconf_conf_dir,      gpgconf_query_swdb,      gpgconf_set_io_cbs,      NULL,		/* io_event */ diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index a0fcb1f4..f23b0bfd 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -2119,6 +2119,7 @@ struct engine_ops _gpgme_engine_ops_gpgsm =      NULL,               /* opassuan_transact */      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      gpgsm_set_io_cbs,      gpgsm_io_event, diff --git a/src/engine-spawn.c b/src/engine-spawn.c index 9d587cc5..7044781b 100644 --- a/src/engine-spawn.c +++ b/src/engine-spawn.c @@ -469,6 +469,7 @@ struct engine_ops _gpgme_engine_ops_spawn =      NULL,               /* opassuan_transact */      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      engspawn_set_io_cbs,      engspawn_io_event,	/* io_event */ diff --git a/src/engine-uiserver.c b/src/engine-uiserver.c index 20a8abf2..3db705d8 100644 --- a/src/engine-uiserver.c +++ b/src/engine-uiserver.c @@ -1386,6 +1386,7 @@ struct engine_ops _gpgme_engine_ops_uiserver =      NULL,               /* opassuan_transact */      NULL,		/* conf_load */      NULL,		/* conf_save */ +    NULL,		/* conf_dir */      NULL,               /* query_swdb */      uiserver_set_io_cbs,      uiserver_io_event, diff --git a/src/engine.c b/src/engine.c index 89a8552c..2c7e625f 100644 --- a/src/engine.c +++ b/src/engine.c @@ -984,6 +984,19 @@ _gpgme_engine_op_conf_save (engine_t engine, gpgme_conf_comp_t conf)  gpgme_error_t +_gpgme_engine_op_conf_dir (engine_t engine, const char *what, char **result) +{ +  if (!engine) +    return gpg_error (GPG_ERR_INV_VALUE); + +  if (!engine->ops->conf_dir) +    return gpg_error (GPG_ERR_NOT_IMPLEMENTED); + +  return (*engine->ops->conf_dir) (engine->engine, what, result); +} + + +gpgme_error_t  _gpgme_engine_op_query_swdb (engine_t engine,                               const char *name, const char *iversion,                               gpgme_query_swdb_result_t result) diff --git a/src/engine.h b/src/engine.h index d25c1fa6..b71b7e2d 100644 --- a/src/engine.h +++ b/src/engine.h @@ -176,6 +176,9 @@ gpgme_error_t _gpgme_engine_op_conf_load (engine_t engine,  					  gpgme_conf_comp_t *conf_p);  gpgme_error_t _gpgme_engine_op_conf_save (engine_t engine,  					  gpgme_conf_comp_t conf); +gpgme_error_t _gpgme_engine_op_conf_dir (engine_t engine, +					 const char *what, +					 char **result);  gpgme_error_t _gpgme_engine_op_query_swdb (engine_t engine,                                             const char *name, diff --git a/src/gpgconf.c b/src/gpgconf.c index b1b84a62..ce6ace41 100644 --- a/src/gpgconf.c +++ b/src/gpgconf.c @@ -108,3 +108,24 @@ gpgme_op_conf_save (gpgme_ctx_t ctx, gpgme_conf_comp_t comp)    ctx->protocol = proto;    return err;  } + + +gpgme_error_t +gpgme_op_conf_dir (gpgme_ctx_t ctx, const char *what, char **result) +{ +  gpgme_error_t err; +  gpgme_protocol_t proto; + +  if (!ctx) +    return gpg_error (GPG_ERR_INV_VALUE); + +  proto = ctx->protocol; +  ctx->protocol = GPGME_PROTOCOL_GPGCONF; +  err = _gpgme_op_reset (ctx, 1); +  if (err) +    return err; + +  err = _gpgme_engine_op_conf_dir (ctx->engine, what, result); +  ctx->protocol = proto; +  return err; +} diff --git a/src/gpgme.def b/src/gpgme.def index a8918122..dd8e532a 100644 --- a/src/gpgme.def +++ b/src/gpgme.def @@ -265,5 +265,7 @@ EXPORTS      gpgme_op_delete_ext                   @197      gpgme_op_delete_ext_start             @198 +    gpgme_op_conf_save			  @199 +  ; END diff --git a/src/gpgme.h.in b/src/gpgme.h.in index 29cda2c6..8afc276e 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -2240,6 +2240,10 @@ gpgme_error_t gpgme_op_conf_load (gpgme_ctx_t ctx, gpgme_conf_comp_t *conf_p);     follow chained components!  */  gpgme_error_t gpgme_op_conf_save (gpgme_ctx_t ctx, gpgme_conf_comp_t comp); +/* Retrieve the configured directory.  */ +gpgme_error_t gpgme_op_conf_dir(gpgme_ctx_t ctx, const char *what, +				char **result); +  /* Information about software versions.   * This structure shall be considered read-only and an application diff --git a/src/libgpgme.vers b/src/libgpgme.vers index 9a74b76f..a95befba 100644 --- a/src/libgpgme.vers +++ b/src/libgpgme.vers @@ -46,6 +46,7 @@ GPGME_1.1 {      gpgme_conf_opt_change;      gpgme_op_conf_load;      gpgme_op_conf_save; +    gpgme_op_conf_dir;      gpgme_cancel_async; | 
