doc/
authorMarcus Brinkmann <mb@g10code.com>
Thu, 6 Feb 2003 20:09:24 +0000 (20:09 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 6 Feb 2003 20:09:24 +0000 (20:09 +0000)
2003-02-06  Marcus Brinkmann  <marcus@g10code.de>

* gpgme.texi (Cancelling an Operation): Removed.
(Passphrase Callback): Document new type for GpgmePassphraseCb.

gpgme/
2003-02-06  Marcus Brinkmann  <marcus@g10code.de>

* gpgme.h (GpgmePassphraseCb): Change type to return GpgmeError,
and add argument for returning the result string.
(gpgme_cancel): Remove prototype.
* gpgme.c (gpgme_cancel): Remove function.
* context.h (struct gpgme_context_s): Remove member cancel.
* passphrase.c (_gpgme_passphrase_command_handler): Call the
passphrase callback in the new way.

tests/
2003-02-06  Marcus Brinkmann  <marcus@g10code.de>

* gpg/t-decrypt.c (passphrase_cb): Fix to new prototype.
* gpg/t-decrypt-verify.c (passphrase_cb): Likewise.
* gpg/t-edit.c (passphrase_cb): Likewise.
* gpg/t-encrypt-sign.c (passphrase_cb): Likewise.
* gpg/t-encrypt-sym.c (passphrase_cb): Likewise.
* gpg/t-sign.c (passphrase_cb): Likewise.
* gpg/t-signers.c (passphrase_cb): Likewise.

19 files changed:
NEWS
doc/ChangeLog
doc/gpgme.texi
gpgme/ChangeLog
gpgme/context.h
gpgme/edit.c
gpgme/gpgme.c
gpgme/gpgme.h
gpgme/passphrase.c
gpgme/wait-global.c
gpgme/wait-private.c
tests/ChangeLog
tests/gpg/t-decrypt-verify.c
tests/gpg/t-decrypt.c
tests/gpg/t-edit.c
tests/gpg/t-encrypt-sign.c
tests/gpg/t-encrypt-sym.c
tests/gpg/t-sign.c
tests/gpg/t-signers.c

diff --git a/NEWS b/NEWS
index 331123c8cdb268a6848bc16f9f229d38e7df3f9e..d0d7266ca2bd282cd05b697dded6ed716b16df74 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -36,6 +36,11 @@ Noteworthy changes in version 0.4.1 (unreleased)
  * The new function gpgme_get_protocol_name can be used to convert a
    GpgmeProtocol value into a string.
 
+ * The GpgmePassphraseCb type now returns a GpgmeError value, and
+   returns the password string in a new parameter.  The gpgme_cancel
+   function has been removed, just return GPGME_Canceled in the
+   passphrase callback directly.
+
  * Interface changes relative to the 0.4.0 release:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 GpgmeIOCb                      CHANGED: Return type from void to GpgmeError.
@@ -49,6 +54,8 @@ gpgme_register_idle             REMOVED
 GpgmeEngineInfo                        NEW
 gpgme_get_engine_info          CHANGED: Return info structure instead XML.
 gpgme_get_protocol_name                NEW
+GpgmePassphraseCb              CHANGED: Return error value, new argument.
+gpgme_cancel                   REMOVED: Return error in callback directly.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Noteworthy changes in version 0.4.0 (2002-12-23)
index 4b695d71ff168ea257d312d0d786441bb920d0dd..37a7f0866331f3a0016e92bafaef21221ae8ea11 100644 (file)
@@ -1,3 +1,8 @@
+2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.texi (Cancelling an Operation): Removed.
+       (Passphrase Callback): Document new type for GpgmePassphraseCb.
+
 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.texi (Engine Information): Rename member part to
index 88472cc3abc88aad2baffc9076197de2216b7a2d..95e615cde154654d28dcc5928b11bb61a2db971c 100644 (file)
@@ -1537,20 +1537,25 @@ current mode otherwise.  Note that 0 is not a valid mode value.
 @cindex callback, passphrase
 @cindex passphrase callback
 
-@deftp {Data type} {const char *(*GpgmePassphraseCb)(void *@var{hook}, const char *@var{desc}, void **@var{r_hd})}
+@deftp {Data type} {GpgmeError (*GpgmePassphraseCb)(void *@var{hook}, const char *@var{desc}, void **@var{r_hd}, const char **@var{result})}
 @tindex GpgmePassphraseCb
 The @code{GpgmePassphraseCb} type is the type of functions usable as
 passphrase callback function.
 
 The string @var{desc} contains a text usable to be displayed to the
 user of the application.  The function should return a passphrase for
-the context when invoked with @var{desc} not being @code{NULL}.
+the context when invoked with @var{desc} not being @code{NULL} in
+*@var{result}.
 
 The user may store information about the resources associated with the
 returned passphrase in @var{*r_hd}.  When the passphrase is no longer
 needed by @acronym{GPGME}, the passphrase callback function will be
 called with @var{desc} being @var{NULL}, and @var{r_hd} being the same
 as at the first invocation.
+
+If an error occurs, return the corresponding @code{GpgmeError} value.
+You can use @code{GPGME_Canceled} to abort the operation.  Otherwise,
+return @code{0}.
 @end deftp
 
 @deftypefun void gpgme_set_passphrase_cb (@w{GpgmeCtx @var{ctx}}, @w{GpgmePassphraseCb @var{passfunc}}, @w{void *@var{hook_value}})
@@ -3113,22 +3118,6 @@ error occurs, @code{NULL} is returned and the error is returned in
 @end deftypefun
 
 
-@node Cancelling an Operation
-@subsection Cancelling an Operation
-@cindex cancellation
-@cindex cryptographic operation, cancel
-
-@deftypefun void gpgme_cancel (@w{GpgmeCtx @var{ctx}})
-The function @code{gpgme_cancel} tries to cancel the pending
-operation.  A running synchronous operation in the context or the
-function @code{gpgme_wait} with this context as its @var{ctx} argument
-might notice the cancellation flag and return.  It is currently not
-guaranteed to work under all circumstances.  Its current primary
-purpose is to prevent asking for a passphrase again in the passphrase
-callback.
-@end deftypefun
-
-
 @node Using External Event Loops
 @subsection Using External Event Loops
 @cindex event loop, external
index 53bcc45dcd8a7bf986b44989717d6f7f877ecd43..0ab952361f309ed6c823a0233601248a74542382 100644 (file)
@@ -1,3 +1,13 @@
+2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.h (GpgmePassphraseCb): Change type to return GpgmeError,
+       and add argument for returning the result string.
+       (gpgme_cancel): Remove prototype.
+       * gpgme.c (gpgme_cancel): Remove function.
+       * context.h (struct gpgme_context_s): Remove member cancel.
+       * passphrase.c (_gpgme_passphrase_command_handler): Call the
+       passphrase callback in the new way.
+
 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * edit.c (_gpgme_edit_status_handler): Call the progress status
index a46a29280a2d3abd5352e65a55023c31763fa300..d2b22d6e7304190a92b3ea56952de1dc547d45fe 100644 (file)
@@ -80,9 +80,6 @@ struct gpgme_context_s
 
   int use_cms;
 
-  /* Cancel operation requested.  */
-  int cancel;
-
   /* The running engine process.  */
   EngineObject engine;
 
index 5fbb4b408c17a56bcdfb1c26c1300b18adff0b09..1fa3929037ee06ec6339d729590ba655915cc207 100644 (file)
@@ -43,7 +43,7 @@ edit_status_handler (GpgmeCtx ctx, GpgmeStatusCode status, char *args)
   if (err)
     return err;
 
-  GpgmeError err = _gpgme_progress_status_handler (ctx, status, args);
+  err = _gpgme_progress_status_handler (ctx, status, args);
   if (err)
     return err;
 
index 02bc9080c5f6921a259d0beb38cc8fc800fca9ea..6deb627a5f9e9b589c422bea1315329d7bf2bde7 100644 (file)
@@ -102,20 +102,6 @@ _gpgme_release_result (GpgmeCtx ctx)
 }
 
 
-/* Cancel the current operation.  It is not guaranteed that it will
-   work for all kinds of operations.  It is especially useful in a
-   passphrase callback to stop the system from asking another time for
-   the passphrase.  */
-void
-gpgme_cancel (GpgmeCtx ctx)
-{
-  if (!ctx)
-    return;
-
-  ctx->cancel = 1;
-}
-
-
 /**
  * gpgme_get_notation:
  * @c: the context
index dcc1eb0461bd1b7612611e89161d4244d711363a..9d395951a1a665905fd3413eccd4067495518345 100644 (file)
@@ -334,8 +334,8 @@ typedef struct _gpgme_engine_info *GpgmeEngineInfo;
 /* Types for callback functions.  */
 
 /* Request a passphrase from the user.  */
-typedef const char *(*GpgmePassphraseCb) (void *hook, const char *desc,
-                                         void **r_hd);
+typedef GpgmeError (*GpgmePassphraseCb) (void *hook, const char *desc,
+                                        void **r_hd, const char **result);
 
 /* Inform the user about progress made.  */
 typedef void (*GpgmeProgressCb) (void *opaque, const char *what,
@@ -487,9 +487,6 @@ void gpgme_set_io_cbs (GpgmeCtx ctx, struct GpgmeIOCbs *io_cbs);
 /* Get the current I/O callback functions.  */
 void gpgme_get_io_cbs (GpgmeCtx ctx, struct GpgmeIOCbs *io_cbs);
 
-/* Cancel a pending operation in CTX.  */
-void gpgme_cancel (GpgmeCtx ctx);
-
 /* Process the pending operation and, if HANG is non-zero, wait for
    the pending operation to finish.  */
 GpgmeCtx gpgme_wait (GpgmeCtx ctx, GpgmeError *status, int hang);
index 67fb43ba1e630831a4617d665a91fd5f3f7340dd..fd492ac7d9385fa05b2f5feeb3ba9c0e2a0e0a77 100644 (file)
@@ -125,13 +125,11 @@ _gpgme_passphrase_command_handler (void *opaque, GpgmeStatusCode code,
     {
       /* We have been called for cleanup.  */
       if (ctx->passphrase_cb)
-       { 
-         /* Fixme: Take the key in account.  */
-         ctx->passphrase_cb (ctx->passphrase_cb_value, NULL, 
-                             &result->last_pw_handle);
-        }
+       /* Fixme: Take the key in account.  */
+       err = ctx->passphrase_cb (ctx->passphrase_cb_value, NULL, 
+                                 &result->last_pw_handle, NULL);
       *result_r = NULL;
-      return 0;
+      return err;
     }
 
   if (!key || !ctx->passphrase_cb)
@@ -160,10 +158,10 @@ _gpgme_passphrase_command_handler (void *opaque, GpgmeStatusCode code,
               bad_passphrase ? "TRY_AGAIN":"ENTER",
               userid_hint, passphrase_info);
 
-      *result_r = ctx->passphrase_cb (ctx->passphrase_cb_value, buf,
-                                     &result->last_pw_handle);
+      err  = ctx->passphrase_cb (ctx->passphrase_cb_value, buf,
+                                &result->last_pw_handle, result_r);
       free (buf);
-      return 0;
+      return err;
     }
 
   *result_r = NULL;
index daf320965ed7a1fa15e7e8890e39ad79a89a3fa0..4025d2b9bc92320731dbc53e7372ce65489ee7d4 100644 (file)
@@ -306,8 +306,6 @@ gpgme_wait (GpgmeCtx ctx, GpgmeError *status, int hang)
              assert (ictx);
 
              err = item->handler (item->handler_value, fdt.fds[i].fd);
-             if (!err && ictx->cancel)
-               err = GPGME_Canceled;
              if (err)
                {
                  /* An error occured.  Close all fds in this context,
index 75d44a72c14914ba582a63a50be42ed24f404376..de7f5353fc981df753fe18264c88644b1f1999de 100644 (file)
@@ -110,8 +110,6 @@ _gpgme_wait_on_condition (GpgmeCtx ctx, volatile int *cond)
              item = (struct wait_item_s *) ctx->fdt.fds[i].opaque;
 
              err = item->handler (item->handler_value, ctx->fdt.fds[i].fd);
-             if (!err && ctx->cancel)
-               err = GPGME_Canceled;
              if (err)
                {
                  /* An error occured.  Close all fds in this context,
index 2ff2aff5cb5f246ababadf4cf1f1b482270f931d..37d6d11c1686764c3d3fbd4fdc71b9ebc58cee40 100644 (file)
@@ -1,3 +1,13 @@
+2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpg/t-decrypt.c (passphrase_cb): Fix to new prototype.
+       * gpg/t-decrypt-verify.c (passphrase_cb): Likewise.
+       * gpg/t-edit.c (passphrase_cb): Likewise.
+       * gpg/t-encrypt-sign.c (passphrase_cb): Likewise.
+       * gpg/t-encrypt-sym.c (passphrase_cb): Likewise.
+       * gpg/t-sign.c (passphrase_cb): Likewise.
+       * gpg/t-signers.c (passphrase_cb): Likewise.
+
 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * t-engine-info.c: Use file_name instead path throughout.
index 1a129a7970dbe52e7168af7e71b944982e6475c6..f7bbbbd4a88a7248ca7a203ca10c1147fe064091 100644 (file)
@@ -1,6 +1,6 @@
 /* t-decrypt-verify.c  - regression test
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
 
    This file is part of GPGME.
  
@@ -58,24 +58,22 @@ print_data (GpgmeData dh)
 }
 
 
-static const char *
-passphrase_cb (void *opaque, const char *desc, void **r_hd)
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-  const char *pass;
+  if (!desc)
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-  if ( !desc )
-    {
-      /* Cleanup by looking at *r_hd.  */
-      return NULL;
-    }
-
-  pass = "abc";
+  *result = "abc";
   fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
-  fprintf (stderr, "sending `%s'\n", pass);
-
-  return pass;
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
+
 static char *
 mk_fname (const char *fname)
 {
index 0eda6acd694dbc8e5ad30cd524cfd0826c1bbd24..39f534ff2bac5c00aa9d8657b4c8b2760e565f1d 100644 (file)
@@ -1,6 +1,6 @@
-/* t-encrypt.c  - regression test
+/* t-decrypt.c  - regression test
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2003 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -41,21 +41,6 @@ struct passphrase_cb_info_s {
                    exit (1); }                               \
                              } while(0)
 
-static void
-print_op_info (GpgmeCtx ctx)
-{
-  char *str = gpgme_get_op_info (ctx, 0);
-
-  if (!str)
-    puts ("<!-- no operation info available -->");
-  else
-    {
-      puts (str);
-      free (str);
-    }
-}
-
-
 static void
 print_data (GpgmeData dh)
 {
@@ -72,23 +57,19 @@ print_data (GpgmeData dh)
 }
 
 
-static const char *
-passphrase_cb ( void *opaque, const char *desc, void **r_hd )
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-    const char *pass;
-
-    if ( !desc ) {
-        /* cleanup by looking at *r_hd */
-
-        
-        return NULL;
-    }
-
-    pass = "abc";
-    fprintf (stderr, "%% requesting passphrase for `%s': ", desc );
-    fprintf (stderr, "sending `%s'\n", pass );
+  if (!desc)
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-    return pass;
+  *result = "abc";
+  fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
 
index 8117d587a5bb0837316c888782b4188343811416..b78a7fe2d9ab0d1d14f97b148a27b9c2f9d4df2f 100644 (file)
@@ -1,6 +1,6 @@
 /* t-edit.c  - regression test
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001, 2002 g10 Code GmbH
+ *      Copyright (C) 2001, 2002, 2003 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -57,22 +57,19 @@ flush_data (GpgmeData dh)
 }
 
 
-static const char *
-passphrase_cb (void *opaque, const char *desc, void **r_hd)
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-  const char *pass;
-
   if (!desc)
-    {
-      /* cleanup by looking at *r_hd */
-      return NULL;
-    }
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-  pass = "abc";
+  *result = "abc";
   fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
-  fprintf (stderr, "sending `%s'\n", pass );
-
-  return pass;
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
 
index dfd54bed5a26faf4fffab5f70d7251a91b50e309..36bd888c3339ef0df636472ed59b437b6a4c40b3 100644 (file)
@@ -62,23 +62,19 @@ print_data (GpgmeData dh)
 }
 
 
-static const char *
-passphrase_cb ( void *opaque, const char *desc, void **r_hd )
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-    const char *pass;
-
-    if ( !desc ) {
-        /* cleanup by looking at *r_hd */
-
-        
-        return NULL;
-    }
-
-    pass = "abc";
-    fprintf (stderr, "%% requesting passphrase for `%s': ", desc );
-    fprintf (stderr, "sending `%s'\n", pass );
+  if (!desc)
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-    return pass;
+  *result = "abc";
+  fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
 
index db3f3e9e26b7096340bb301d37a3a5ad32465e93..520005caf94f455281e3da0c780ff1a59cda9a0c 100644 (file)
@@ -1,6 +1,6 @@
-/* t-encrypt.c  - regression test
+/* t-encrypt-sym.c  - regression test
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2003 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -47,24 +47,19 @@ print_data (GpgmeData dh)
     fail_if_err (GPGME_File_Error);
 }
 
-
-static const char *
-passphrase_cb ( void *opaque, const char *desc, void **r_hd )
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-    const char *pass;
-
-    if ( !desc ) {
-        /* cleanup by looking at *r_hd */
-
-        
-        return NULL;
-    }
+  if (!desc)
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-    pass = "abc";
-    fprintf (stderr, "%% requesting passphrase for `%s': ", desc );
-    fprintf (stderr, "sending `%s'\n", pass );
-
-    return pass;
+  *result = "abc";
+  fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
 
index 9caaf696ef7493417c94ccc6e6a62a5ea05b1c39..1e69930b0f6b6859f8a1deaa92bae15757fa5cd6 100644 (file)
@@ -1,6 +1,6 @@
 /* t-sign.c  - regression test
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2003 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -63,23 +63,19 @@ print_data (GpgmeData dh)
 }
 
 
-static const char *
-passphrase_cb ( void *opaque, const char *desc, void **r_hd )
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-    const char *pass;
-
-    if ( !desc ) {
-        /* cleanup by looking at *r_hd */
-
-        
-        return NULL;
-    }
-
-    pass = "abc";
-    fprintf (stderr, "%% requesting passphrase for `%s': ", desc );
-    fprintf (stderr, "sending `%s'\n", pass );
+  if (!desc)
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-    return pass;
+  *result = "abc";
+  fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
 
index 2e8d3f410a121de4bd71f7d24589900ee04fbbd5..d17b3976c90c5a25ed7cd9b85d8f6a308cf06122 100644 (file)
@@ -1,6 +1,6 @@
 /* t-signers.c  - Regression tests for the Gpgme multiple signers interface.
  *     Copyright (C) 2000 Werner Koch (dd9jn)
- *      Copyright (C) 2001 g10 Code GmbH
+ *      Copyright (C) 2001, 2003 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
@@ -62,25 +62,22 @@ print_data (GpgmeData dh)
     fail_if_err (GPGME_File_Error);
 }
 
-
-static const char *
-passphrase_cb (void *opaque, const char *desc, void **r_hd)
+static GpgmeError
+passphrase_cb (void *opaque, const char *desc,
+              void **r_hd, const char **result)
 {
-  const char *pass;
-  
   if (!desc)
-    {
-      /* cleanup by looking at *r_hd */
-      return NULL;
-    }
+    /* Cleanup by looking at *r_hd.  */
+    return 0;
 
-  pass = "abc";
+  *result = "abc";
   fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
-  fprintf (stderr, "sending `%s'\n", pass);
-
-  return pass;
+  fprintf (stderr, "sending `%s'\n", *result);
+  
+  return 0;
 }
 
+
 int 
 main (int argc, char *argv[])
 {