aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/passphrase.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2003-01-30 22:40:05 +0000
committerMarcus Brinkmann <[email protected]>2003-01-30 22:40:05 +0000
commit7618b28f1d8ea4bf90d866bf6dba099ca80c7010 (patch)
treea59d0d2e8e9a9ee220da075bfc8dce128a468238 /gpgme/passphrase.c
parentFix comment indentation. (diff)
downloadgpgme-7618b28f1d8ea4bf90d866bf6dba099ca80c7010.tar.gz
gpgme-7618b28f1d8ea4bf90d866bf6dba099ca80c7010.zip
2003-01-30 Marcus Brinkmann <[email protected]>
* engine-gpgsm.c (status_handler): Do not close status fd at end of function. * ops.h (_gpgme_op_data_lookup): Add prototype. * op-support.c: Include <stdlib.h>. (_gpgme_op_data_lookup): New function. * decrypt.c (_gpgme_release_decrypt_result): Function removed. (struct decrypt_result_s): Rename to ... (struct decrypt_resul): ... this. (DecryptResult): New type. (_gpgme_decrypt_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * sign.c (_gpgme_release_sign_result): Function removed. (release_sign_result): New function. (struct sign_result_s): Rename to ... (struct sign_result): ... this. (SignResult): New type. (_gpgme_sign_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * encrypt.c (struct encrypt_result_s): Rename to ... (struct encrypt_result): ... this. (_gpgme_release_encrypt_result): Function removed. (release_encrypt_result): New function. (_gpgme_encrypt_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * verify.c (struct verify_result_s): Rename to ... (struct verify_result): ... this. Remove member next. (VerifyResult): New type. (_gpgme_release_verify_result): Function removed. (release_verify_result): New function. (finish_sig): Change first argument to type VerifyResult. Diddle the type of the op_data structure. (add_notation): Change first argument to type VerifyResult. (_gpgme_verify_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * passphrase.c (struct passphrase_result_s): Rename to ... (struct passphrase_result): ... this. Remove member next. (PassphraseResult): New type. (_gpgme_release_passphrase_result): Function removed. (release_passphrase_result): New function. (_gpgme_passphrase_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. (_gpgme_passphrase_command_handler): Likewise. * keylist.c (struct keylist_result_s): Rename to ... (struct keylist_result): ... this. Remove member next. (KeylistResult): New type. (_gpgme_release_keylist_result): Function removed. (release_keylist_result): New function. (keylist_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. * edit.c (struct edit_result_s): Rename to ... (struct edit_result): ... this. Remove member next. (EditResult): New type. (_gpgme_release_edit_result): Function removed. (release_edit_result): New function. (edit_status_handler): Don't use test_and_allocate_result, but use _gpgme_op_data_lookup to retrieve result data object. (command_handler): Likewise. * types.h (DecryptResult, SignResult, EncryptResult, PassphraseResult, ImportResult, DeleteResult, GenKeyResult, KeylistResult, EditResult): Types removed. * ops.h: Don't include "types.h", but "gpgme.h" and "context.h". (test_and_allocate_result): Remove macro. (_gpgme_release_decrypt_result): Remove prototype. (_gpgme_decrypt_result): Remove prototype. (_gpgme_release_sign_result): Remove prototype. (_gpgme_release_encrypt_result): Remove prototype. (_gpgme_release_passphrase_result): Remove prototype. (_gpgme_release_import_result): Remove prototype. (_gpgme_release_delete_result): Remove prototype. (_gpgme_release_genkey_result): Remove prototype. (_gpgme_release_keylist_result): Remove prototype. (_gpgme_release_edit_result): Remove prototype. (_gpgme_release_verify_result): Remove prototype. * gpgme.c (_gpgme_release_result): Rewritten. * context.h (enum ctx_op_data_type): New enum. (struct ctx_op_data): New structure. (struct gpgme_context_s): Replace the member result with a member op_data. (fail_on_pending_request): Remove macro. * op-support.c (_gpgme_op_reset): Expand macro fail_on_pending_request. * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
Diffstat (limited to '')
-rw-r--r--gpgme/passphrase.c84
1 files changed, 45 insertions, 39 deletions
diff --git a/gpgme/passphrase.c b/gpgme/passphrase.c
index 43f2b7ba..67fb43ba 100644
--- a/gpgme/passphrase.c
+++ b/gpgme/passphrase.c
@@ -29,9 +29,10 @@
#include "util.h"
#include "context.h"
#include "ops.h"
+#include "debug.h"
-
-struct passphrase_result_s
+
+struct passphrase_result
{
int no_passphrase;
void *last_pw_handle;
@@ -39,58 +40,63 @@ struct passphrase_result_s
char *passphrase_info;
int bad_passphrase;
};
+typedef struct passphrase_result *PassphraseResult;
-
-void
-_gpgme_release_passphrase_result (PassphraseResult result)
+static void
+release_passphrase_result (void *hook)
{
- if (!result)
- return;
+ PassphraseResult result = (PassphraseResult) hook;
+
free (result->passphrase_info);
free (result->userid_hint);
- free (result);
}
-
+
GpgmeError
_gpgme_passphrase_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
{
- test_and_allocate_result (ctx, passphrase);
+ GpgmeError err;
+ PassphraseResult result;
+
+ err = _gpgme_op_data_lookup (ctx, OPDATA_PASSPHRASE, (void **) &result,
+ sizeof (*result), release_passphrase_result);
+ if (err)
+ return err;
switch (code)
{
case GPGME_STATUS_USERID_HINT:
- free (ctx->result.passphrase->userid_hint);
- if (!(ctx->result.passphrase->userid_hint = strdup (args)))
+ free (result->userid_hint);
+ if (!(result->userid_hint = strdup (args)))
return GPGME_Out_Of_Core;
break;
case GPGME_STATUS_BAD_PASSPHRASE:
- ctx->result.passphrase->bad_passphrase++;
- ctx->result.passphrase->no_passphrase = 0;
+ result->bad_passphrase++;
+ result->no_passphrase = 0;
break;
case GPGME_STATUS_GOOD_PASSPHRASE:
- ctx->result.passphrase->bad_passphrase = 0;
- ctx->result.passphrase->no_passphrase = 0;
+ result->bad_passphrase = 0;
+ result->no_passphrase = 0;
break;
case GPGME_STATUS_NEED_PASSPHRASE:
case GPGME_STATUS_NEED_PASSPHRASE_SYM:
- free (ctx->result.passphrase->passphrase_info);
- ctx->result.passphrase->passphrase_info = strdup (args);
- if (!ctx->result.passphrase->passphrase_info)
+ free (result->passphrase_info);
+ result->passphrase_info = strdup (args);
+ if (!result->passphrase_info)
return GPGME_Out_Of_Core;
break;
case GPGME_STATUS_MISSING_PASSPHRASE:
DEBUG0 ("missing passphrase - stop\n");;
- ctx->result.passphrase->no_passphrase = 1;
+ result->no_passphrase = 1;
break;
case GPGME_STATUS_EOF:
- if (ctx->result.passphrase->no_passphrase
- || ctx->result.passphrase->bad_passphrase)
+ if (result->no_passphrase
+ || result->bad_passphrase)
return GPGME_No_Passphrase;
break;
@@ -104,16 +110,16 @@ _gpgme_passphrase_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args
GpgmeError
_gpgme_passphrase_command_handler (void *opaque, GpgmeStatusCode code,
- const char *key, const char **result)
+ const char *key, const char **result_r)
{
GpgmeCtx ctx = opaque;
+ GpgmeError err;
+ PassphraseResult result;
- if (!ctx->result.passphrase)
- {
- ctx->result.passphrase = calloc (1, sizeof *ctx->result.passphrase);
- if (!ctx->result.passphrase)
- return GPGME_Out_Of_Core;
- }
+ err = _gpgme_op_data_lookup (ctx, OPDATA_PASSPHRASE, (void **) &result,
+ sizeof (*result), release_passphrase_result);
+ if (err)
+ return err;
if (!code)
{
@@ -122,26 +128,26 @@ _gpgme_passphrase_command_handler (void *opaque, GpgmeStatusCode code,
{
/* Fixme: Take the key in account. */
ctx->passphrase_cb (ctx->passphrase_cb_value, NULL,
- &ctx->result.passphrase->last_pw_handle);
+ &result->last_pw_handle);
}
- *result = NULL;
+ *result_r = NULL;
return 0;
}
if (!key || !ctx->passphrase_cb)
{
- *result = NULL;
+ *result_r = NULL;
return 0;
}
if (code == GPGME_STATUS_GET_HIDDEN && !strcmp (key, "passphrase.enter"))
{
- const char *userid_hint = ctx->result.passphrase->userid_hint;
- const char *passphrase_info = ctx->result.passphrase->passphrase_info;
- int bad_passphrase = ctx->result.passphrase->bad_passphrase;
+ const char *userid_hint = result->userid_hint;
+ const char *passphrase_info = result->passphrase_info;
+ int bad_passphrase = result->bad_passphrase;
char *buf;
- ctx->result.passphrase->bad_passphrase = 0;
+ result->bad_passphrase = 0;
if (!userid_hint)
userid_hint = "[User ID hint missing]";
if (!passphrase_info)
@@ -154,13 +160,13 @@ _gpgme_passphrase_command_handler (void *opaque, GpgmeStatusCode code,
bad_passphrase ? "TRY_AGAIN":"ENTER",
userid_hint, passphrase_info);
- *result = ctx->passphrase_cb (ctx->passphrase_cb_value, buf,
- &ctx->result.passphrase->last_pw_handle);
+ *result_r = ctx->passphrase_cb (ctx->passphrase_cb_value, buf,
+ &result->last_pw_handle);
free (buf);
return 0;
}
- *result = NULL;
+ *result_r = NULL;
return 0;
}