diff options
| author | Marcus Brinkmann <[email protected]> | 2002-01-31 00:31:44 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2002-01-31 00:31:44 +0000 | 
| commit | 129da707d1464633595151e70b3982cc3bbe5496 (patch) | |
| tree | d71eac8c7efaf5ae3400df154aaa6fdf77618343 | |
| parent | 2002-01-30 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-129da707d1464633595151e70b3982cc3bbe5496.tar.gz gpgme-129da707d1464633595151e70b3982cc3bbe5496.zip | |
doc/
2002-01-31  Marcus Brinkmann  <[email protected]>
	* gpgme.texi (Generating Keys): Document error at creation
	failure.
gpgme/
2002-01-31  Marcus Brinkmann  <[email protected]>
	* rungpg.h: Add STATUS_KEY_CREATED.
	* progress.c: New file.
	* Makefile.am (libgpgme_la_SOURCES): Add progress.c.
	* genkey.c (genkey_status_handler): Use
	_gpgme_progress_status_handler.  Add check for status.
	(struct genkey_result_s): New structure.
	(_gpgme_release_genkey_result): New function.
	(gpgme_op_genkey): Check for error.
	* gpgme.c (_gpgme_release_result): Call
	_gpgme_release_genkey_result.
	* ops.h (_gpgme_release_genkey_result): Add prototype.
	* types.h (GenKeyResult): New type.
	* context.h (gpgme_context_s): Add GenKeyResult to member result.
| -rw-r--r-- | TODO | 4 | ||||
| -rw-r--r-- | doc/ChangeLog | 5 | ||||
| -rw-r--r-- | doc/gpgme.texi | 5 | ||||
| -rw-r--r-- | gpgme/ChangeLog | 18 | ||||
| -rw-r--r-- | gpgme/Makefile.am | 3 | ||||
| -rw-r--r-- | gpgme/context.h | 8 | ||||
| -rw-r--r-- | gpgme/delete.c | 2 | ||||
| -rw-r--r-- | gpgme/genkey.c | 91 | ||||
| -rw-r--r-- | gpgme/gpgme.c | 3 | ||||
| -rw-r--r-- | gpgme/ops.h | 10 | ||||
| -rw-r--r-- | gpgme/rungpg.h | 3 | ||||
| -rw-r--r-- | gpgme/types.h | 6 | 
12 files changed, 108 insertions, 50 deletions
| @@ -35,7 +35,9 @@     (it's an internal error, as select_protocol checks already).  * Operations -** Import, export, genkey, delete status handler need much more work. +** Export status handler need much more work. +** Import should return a useful error when one happened. +** Genkey should return something more useful than General_Error.  * Error Values  ** Map ASSUAN error values. diff --git a/doc/ChangeLog b/doc/ChangeLog index 8d5a898a..ed854aa4 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2002-01-31  Marcus Brinkmann  <[email protected]> + +	* gpgme.texi (Generating Keys): Document error at creation +	failure. +  2002-01-30  Marcus Brinkmann  <[email protected]>  	* gpgme.texi (Deleting Keys): Document new error values. diff --git a/doc/gpgme.texi b/doc/gpgme.texi index 7287307c..7e883e3c 100644 --- a/doc/gpgme.texi +++ b/doc/gpgme.texi @@ -1472,8 +1472,9 @@ allowed.  The function returns @code{GPGME_No_Error} if the operation could be  started successfully, @code{GPGME_Invalid_Value} if @var{parms} is not -a valid XML string, and @code{GPGME_Not_Supported} if @var{pubkey} or -@var{seckey} is not @code{NULL}. +a valid XML string, @code{GPGME_Not_Supported} if @var{pubkey} or +@var{seckey} is not @code{NULL}, and @code{GPGME_General_Error} if no +key was created by the backend.  @end deftypefun  @deftypefun GpgmeError gpgme_op_genkey_start (@w{GpgmeCtx @var{ctx}}, @w{const char *@var{parms}}, @w{GpgmeData @var{pubkey}}, @w{GpgmeData @var{seckey}}) diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 8b47b092..8f0f1e31 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,21 @@ +2002-01-31  Marcus Brinkmann  <[email protected]> + +	* rungpg.h: Add STATUS_KEY_CREATED. + +	* progress.c: New file. +	* Makefile.am (libgpgme_la_SOURCES): Add progress.c. + +	* genkey.c (genkey_status_handler): Use +	_gpgme_progress_status_handler.  Add check for status. +	(struct genkey_result_s): New structure. +	(_gpgme_release_genkey_result): New function. +	(gpgme_op_genkey): Check for error. +	* gpgme.c (_gpgme_release_result): Call +	_gpgme_release_genkey_result. +	* ops.h (_gpgme_release_genkey_result): Add prototype. +	* types.h (GenKeyResult): New type. +	* context.h (gpgme_context_s): Add GenKeyResult to member result. +  2002-01-30  Marcus Brinkmann  <[email protected]>  	* gpgme.c (_gpgme_release_result): Call diff --git a/gpgme/Makefile.am b/gpgme/Makefile.am index e6c1dd75..ffc808d4 100644 --- a/gpgme/Makefile.am +++ b/gpgme/Makefile.am @@ -1,5 +1,5 @@  # Copyright (C) 2000 Werner Koch (dd9jn) -# Copyright (C) 2001 g10 Code GmbH +# Copyright (C) 2001, 2002 g10 Code GmbH  #   # This file is part of GPGME.  #  @@ -46,6 +46,7 @@ libgpgme_la_SOURCES = \  	verify.c \  	sign.c \  	passphrase.c \ +	progress.c \          key.c key.h \  	keylist.c \  	trustlist.c \ diff --git a/gpgme/context.h b/gpgme/context.h index ae2460bd..9a467fee 100644 --- a/gpgme/context.h +++ b/gpgme/context.h @@ -1,6 +1,6 @@  /* context.h    *	Copyright (C) 2000 Werner Koch (dd9jn) - *      Copyright (C) 2001 g10 Code GmbH + *      Copyright (C) 2001, 2002 g10 Code GmbH   *   * This file is part of GPGME.   * @@ -70,6 +70,7 @@ struct gpgme_context_s {          PassphraseResult passphrase;          ImportResult import;          DeleteResult delete; +        GenKeyResult genkey;      } result;      GpgmeData notation;    /* last signature notation */ @@ -136,9 +137,4 @@ struct gpgme_recipients_s {                  gpgme_wait ((c), 1);                          \               } while (0) - -  #endif /* CONTEXT_H */ - - - diff --git a/gpgme/delete.c b/gpgme/delete.c index 23044c4f..35ba0fee 100644 --- a/gpgme/delete.c +++ b/gpgme/delete.c @@ -1,5 +1,5 @@  /* delete.c -  delete a key  - *      Copyright (C) 2001 g10 Code GmbH + *      Copyright (C) 2001, 2002 g10 Code GmbH   *   * This file is part of GPGME.   * diff --git a/gpgme/genkey.c b/gpgme/genkey.c index be52056d..ca04b4e4 100644 --- a/gpgme/genkey.c +++ b/gpgme/genkey.c @@ -1,6 +1,6 @@  /* genkey.c -  key generation   *	Copyright (C) 2000 Werner Koch (dd9jn) - *      Copyright (C) 2001 g10 Code GmbH + *      Copyright (C) 2001, 2002 g10 Code GmbH   *   * This file is part of GPGME.   * @@ -29,39 +29,55 @@  #include "context.h"  #include "ops.h" + +struct genkey_result_s +{ +  int created_primary : 1; +  int created_sub : 1; +}; + + +void +_gpgme_release_genkey_result (GenKeyResult result) +{ +  if (!result) +    return; +  xfree (result); +} +  static void -genkey_status_handler ( GpgmeCtx ctx, GpgStatusCode code, char *args ) +genkey_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)  { -    if ( code == STATUS_PROGRESS && *args ) { -        if (ctx->progress_cb) { -            char *p; -            int type=0, current=0, total=0; -             -            if ( (p = strchr (args, ' ')) ) { -                *p++ = 0; -                if (*p) { -                    type = *(byte*)p; -                    if ( (p = strchr (p+1, ' ')) ) { -                        *p++ = 0; -                        if (*p) { -                            current = atoi (p); -                            if ( (p = strchr (p+1, ' ')) ) { -                                *p++ = 0; -                                total = atoi (p); -                            } -                        } -                    } -                } -            }            -            if ( type != 'X' ) -                ctx->progress_cb ( ctx->progress_cb_value, args, type, -                                   current, total ); +  _gpgme_progress_status_handler (ctx, code, args); + +  if (ctx->out_of_core) +    return; + +  if (!ctx->result.genkey) +    { +      ctx->result.genkey = xtrycalloc (1, sizeof *ctx->result.genkey); +      if (!ctx->result.genkey) +        { +          ctx->out_of_core = 1; +          return;          } -        return;      } -    DEBUG2 ("genkey_status: code=%d args=`%s'\n", code, args ); -    /* FIXME: Need to do more */ +  switch (code) +    { +    case STATUS_KEY_CREATED: +      if (args && *args) +	{ +	  if (*args == 'B' || *args == 'P') +	    ctx->result.genkey->created_primary = 1; +	  if (*args == 'B' || *args == 'S') +	    ctx->result.genkey->created_sub = 1; +	} +      break; + +    default: +      break; +    }  } @@ -189,6 +205,7 @@ gpgme_op_genkey_start (GpgmeCtx ctx, const char *parms,    return err;  } +  /**   * gpgme_op_genkey:   * @c: the context @@ -209,11 +226,15 @@ gpgme_op_genkey (GpgmeCtx ctx, const char *parms,  {    GpgmeError err = gpgme_op_genkey_start (ctx, parms, pubkey, seckey);    if (!err) -    gpgme_wait (ctx, 1); +    { +      gpgme_wait (ctx, 1); + +      /* FIXME: Should return some more useful error value.  */ +      if (!ctx->result.genkey) +	err = mk_error (General_Error); +      else if (!ctx->result.genkey->created_primary +	       && !ctx->result.genkey->created_sub) +	err = mk_error (General_Error); +    }    return err;  } - - - - - diff --git a/gpgme/gpgme.c b/gpgme/gpgme.c index d528f8f0..dbd620d2 100644 --- a/gpgme/gpgme.c +++ b/gpgme/gpgme.c @@ -34,7 +34,7 @@   * @r_ctx: Returns the new context   *    * Create a new context to be used with most of the other GPGME - * functions.  Use gpgme_release_contect() to release all resources + * functions.  Use gpgme_release_context() to release all resources   *   * Return value: An error code    **/ @@ -88,6 +88,7 @@ _gpgme_release_result (GpgmeCtx ctx)    _gpgme_release_passphrase_result (ctx->result.passphrase);    _gpgme_release_import_result (ctx->result.import);    _gpgme_release_delete_result (ctx->result.delete); +  _gpgme_release_genkey_result (ctx->result.genkey);    memset (&ctx->result, 0, sizeof (ctx->result));    _gpgme_set_op_info (ctx, NULL);  } diff --git a/gpgme/ops.h b/gpgme/ops.h index ed6e5db9..7b6b90f5 100644 --- a/gpgme/ops.h +++ b/gpgme/ops.h @@ -1,6 +1,6 @@  /* ops.h - internal operations stuff    *	Copyright (C) 2000 Werner Koch (dd9jn) - *      Copyright (C) 2001 g10 Code GmbH + *      Copyright (C) 2001, 2002 g10 Code GmbH   *   * This file is part of GPGME.   * @@ -95,15 +95,23 @@ void _gpgme_passphrase_status_handler (GpgmeCtx ctx, GpgStatusCode code,  GpgmeError _gpgme_passphrase_start (GpgmeCtx ctx);  GpgmeError _gpgme_passphrase_result (GpgmeCtx ctx); +/*-- progress.c --*/ +void _gpgme_progress_status_handler (GpgmeCtx ctx, GpgStatusCode code, +				     char *args); +  /*-- import.c --*/  void _gpgme_release_import_result (ImportResult res);  /*-- delete.c --*/  void _gpgme_release_delete_result (DeleteResult res); +/*-- genkey.c --*/ +void _gpgme_release_genkey_result (GenKeyResult res); +  /*-- version.c --*/  const char *_gpgme_compare_versions (const char *my_version,  				     const char *req_version);  char *_gpgme_get_program_version (const char *const path); +  #endif /* OPS_H */ diff --git a/gpgme/rungpg.h b/gpgme/rungpg.h index 3ca993ce..9120a4d0 100644 --- a/gpgme/rungpg.h +++ b/gpgme/rungpg.h @@ -48,7 +48,6 @@ typedef enum  {      STATUS_SHM_GET_BOOL       ,      STATUS_SHM_GET_HIDDEN     ,      STATUS_NEED_PASSPHRASE    , -    STATUS_USERID_HINT        ,      STATUS_UNEXPECTED         ,      STATUS_VALIDSIG           ,      STATUS_SIG_ID	      , @@ -81,9 +80,11 @@ typedef enum  {      STATUS_GOT_IT	      ,      STATUS_PROGRESS 	      ,      STATUS_SIG_CREATED	      , +    STATUS_KEY_CREATED	      ,      STATUS_SESSION_KEY        ,      STATUS_NOTATION_NAME      ,      STATUS_NOTATION_DATA      , +    STATUS_USERID_HINT	      ,      STATUS_POLICY_URL         ,      STATUS_BEGIN_STREAM       ,      STATUS_END_STREAM         , diff --git a/gpgme/types.h b/gpgme/types.h index 38f58f99..9ebdfe91 100644 --- a/gpgme/types.h +++ b/gpgme/types.h @@ -1,6 +1,6 @@  /* types.h -  Some type definitions   *	Copyright (C) 2000 Werner Koch (dd9jn) - *      Copyright (C) 2001 g10 Code GmbH + *      Copyright (C) 2001, 2002 g10 Code GmbH   *   * This file is part of GPGME.   * @@ -84,5 +84,9 @@ typedef struct import_result_s *ImportResult;  struct delete_result_s;  typedef struct delete_result_s *DeleteResult; +/*-- genkey.c --*/ +struct genkey_result_s; +typedef struct genkey_result_s *GenKeyResult; +  #endif /* TYPES_H */ | 
