aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--TODO4
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/gpgme.texi5
-rw-r--r--gpgme/ChangeLog18
-rw-r--r--gpgme/Makefile.am3
-rw-r--r--gpgme/context.h8
-rw-r--r--gpgme/delete.c2
-rw-r--r--gpgme/genkey.c91
-rw-r--r--gpgme/gpgme.c3
-rw-r--r--gpgme/ops.h10
-rw-r--r--gpgme/rungpg.h3
-rw-r--r--gpgme/types.h6
12 files changed, 108 insertions, 50 deletions
diff --git a/TODO b/TODO
index 9f09b416..1a840f7b 100644
--- a/TODO
+++ b/TODO
@@ -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 */