diff --git a/NEWS b/NEWS index 8aa40413..b85bb747 100644 --- a/NEWS +++ b/NEWS @@ -107,7 +107,7 @@ GpgmeGenKeyResult NEW gpgme_op_import_ext DEPRECATED: Use gpgme_op_import_result. gpgme_op_import_result NEW GpgmeImportStatus NEW -GPgmeImportResult NEW +GpgmeImportResult NEW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Noteworthy changes in version 0.4.0 (2002-12-23) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8cd00e78..24031a4b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,16 @@ +2003-04-27 Marcus Brinkmann + + * gpgme.texi (Deleting Keys): Document + GPGME_Ambiguous_Specification. + (Error Values): Remove GPGME_Invalid_Type and GPGME_Invalid_Mode. + Add GPGME_Unknown_Reason, GPGME_Not_Found, + GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage, + GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known, + GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key, + GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long, + GPGME_Unsupported_Algorithm, GPGME_Sig_Expired, + GPGME_Bad_Signature, GPGME_No_Public_Key. + 2003-04-25 Marcus Brinkmann * gpgme.texi (Importing Keys): Change GPGME_IMPORT_PRIVATE to diff --git a/doc/gpgme.texi b/doc/gpgme.texi index cb923851..7fdf41ee 100644 --- a/doc/gpgme.texi +++ b/doc/gpgme.texi @@ -819,16 +819,6 @@ This value means that an I/O read operation failed. @item GPGME_Write_Error This value means that an I/O write operation failed. -@item GPGME_Invalid_Type -This value means that a user provided object was of a wrong or -incompatible type. Usually this refers to the type of a -@code{GpgmeData} object. - -@item GPGME_Invalid_Mode -This value means that a @code{GpgmeData} object has an incorrect mode -of operation (for example, doesn't support output although it is -attempted to use it as an output buffer). - @item GPGME_File_Error This value means that a file I/O operation failed. The value of @var{errno} contains the system error value. @@ -851,6 +841,61 @@ This value means that the engine that implements the desired protocol is currently not available. This can either be because the sources were configured to exclude support for this engine, or because the engine is not installed properly. + +@item GPGME_Unknown_Reason +This value indicates that a user ID was invalid but the exact reason +is not specified. + +@item GPGME_Not_Found +This value indicates that a user ID was not found. + +@item GPGME_Ambiguous_Specification +This value indicates that a user ID did not specify a unique key. + +@item GPGME_Wrong_Key_Usage +This value indicates that a key is not used appropriately. + +@item GPGME_Key_Revoked +This value indicates that a key was revoced. + +@item GPGME_Key_Expired +This value indicates that a key was expired. + +@item GPGME_No_CRL_Known +This value indicates that no certificate revocation list is known for +the certificate. + +@item GPGME_Policy_Mismatch +This value indicates that a policy issue occured. + +@item GPGME_No_Secret_Key +This value indicates that no secret key for the user ID is available. + +@item GPGME_Key_Not_Trusted +This value indicates that the key with the user ID is not trusted. + +@item GPGME_Issuer_Missing +This value indicates that a key could not be imported because there is +no issuer + +@item GPGME_Chain_Too_Long +This value indicates that a key could not be imported because its +certificate chain is too long. + +@item GPGME_Unsupported_Algorithm +This value means a verification failed because the cryptographic +algorithm is not supported by the crypto backend. + +@item GPGME_Sig_Expired +This value means a verification failed because the signature expired. + +@item GPGME_Bad_Signature +This value means a verification failed because the signature is bad. + +@item GPGME_No_Public_Key +This value means a verification failed because the public key is not +available. + @end table @end deftp @@ -2416,8 +2461,9 @@ otherwise secret keys are deleted as well, if that is supported. The function returns @code{GPGME_No_Error} if the key was deleted successfully, @code{GPGME_Invalid_Value} if @var{ctx} or @var{key} is not a valid pointer, @code{GPGME_Invalid_Key} if @var{key} could not -be found in the keyring, and @code{GPGME_Conflict} if the secret key -for @var{key} is available, but @var{allow_secret} is zero. +be found in the keyring, @code{GPGME_Ambiguous_Specification} if the +key was not specified unambiguously, and @code{GPGME_Conflict} if the +secret key for @var{key} is available, but @var{allow_secret} is zero. @end deftypefun @deftypefun GpgmeError gpgme_op_delete_start (@w{GpgmeCtx @var{ctx}}, @w{const GpgmeKey @var{key}}, @w{int @var{allow_secret}}) diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 3949b544..774d9307 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,18 @@ +2003-04-27 Marcus Brinkmann + + * delete.c: Include and "gpgme.h", but not "util.h" or + "key.h". + (enum delete_problem): Move into function delete_status_handler. + (delete_status_handler): Change first argument to void *. Parse + delete problem with strtol instead atoi. Return better error + values. + (_gpgme_op_delete_start): Rename to ... + (delete_start): ... this. Rework error handling. + (gpgme_op_delete_start): Use delete_start instead + _gpgme_op_delete_start. + (gpgme_op_delete): Likewise. + * gpgme.h (GpgmeDataType): Removed. + 2003-04-25 Marcus Brinkmann * gpgme.h: Change GPGME_IMPORT_PRIVATE to GPGME_IMPORT_SECRET. @@ -11,7 +26,7 @@ GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key, GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long, GPGME_Unsupported_Algorithm, GPGME_Sig_Expired, - GPGME_Bad_Signature, GPGME_No_Public_Key): New error codes. + GPGME_Bad_Signature, GPGME_No_Public_Key added as new error codes. (struct _gpgme_import_status): New structure. (GpgmeImportStatus): New type. (struct _gpgme_op_import_result): New structure. diff --git a/gpgme/delete.c b/gpgme/delete.c index 9e8ebe9d..813eb5db 100644 --- a/gpgme/delete.c +++ b/gpgme/delete.c @@ -21,28 +21,33 @@ #include #endif #include +#include -#include "util.h" +#include "gpgme.h" #include "context.h" #include "ops.h" -#include "key.h" - - -enum delete_problem - { - DELETE_No_Problem = 0, - DELETE_No_Such_Key = 1, - DELETE_Must_Delete_Secret_Key = 2, - DELETE_Ambiguous_Specification = 3 - }; - + static GpgmeError -delete_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) +delete_status_handler (void *priv, GpgmeStatusCode code, char *args) { if (code == GPGME_STATUS_DELETE_PROBLEM) { - enum delete_problem problem = atoi (args); + enum delete_problem + { + DELETE_No_Problem = 0, + DELETE_No_Such_Key = 1, + DELETE_Must_Delete_Secret_Key = 2, + DELETE_Ambiguous_Specification = 3 + }; + long problem; + char *tail; + + errno = 0; + problem = strtol (args, &tail, 0); + if (errno || (*tail && *tail != ' ')) + return GPGME_General_Error; + switch (problem) { case DELETE_No_Problem: @@ -55,7 +60,8 @@ delete_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) return GPGME_Conflict; case DELETE_Ambiguous_Specification: - /* XXX Need better error value. Fall through. */ + return GPGME_Ambiguous_Specification; + default: return GPGME_General_Error; } @@ -65,51 +71,36 @@ delete_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) static GpgmeError -_gpgme_op_delete_start (GpgmeCtx ctx, int synchronous, - const GpgmeKey key, int allow_secret) +delete_start (GpgmeCtx ctx, int synchronous, const GpgmeKey key, + int allow_secret) { - GpgmeError err = 0; + GpgmeError err; err = _gpgme_op_reset (ctx, synchronous); if (err) - goto leave; + return err; _gpgme_engine_set_status_handler (ctx->engine, delete_status_handler, ctx); - err = _gpgme_engine_op_delete (ctx->engine, key, allow_secret); - - leave: - if (err) - { - _gpgme_engine_release (ctx->engine); - ctx->engine = NULL; - } - return err; + return _gpgme_engine_op_delete (ctx->engine, key, allow_secret); } +/* Delete KEY from the keyring. If ALLOW_SECRET is non-zero, secret + keys are also deleted. */ GpgmeError gpgme_op_delete_start (GpgmeCtx ctx, const GpgmeKey key, int allow_secret) { - return _gpgme_op_delete_start (ctx, 0, key, allow_secret); + return delete_start (ctx, 0, key, allow_secret); } -/** - * gpgme_op_delete: - * @c: Context - * @key: A Key Object - * @allow_secret: Allow secret key delete - * - * Delete the give @key from the key database. To delete a secret - * along with the public key, @allow_secret must be true. - * - * Return value: 0 on success or an error code. - **/ +/* Delete KEY from the keyring. If ALLOW_SECRET is non-zero, secret + keys are also deleted. */ GpgmeError gpgme_op_delete (GpgmeCtx ctx, const GpgmeKey key, int allow_secret) { - GpgmeError err = _gpgme_op_delete_start (ctx, 1, key, allow_secret); + GpgmeError err = delete_start (ctx, 1, key, allow_secret); if (!err) err = _gpgme_wait_one (ctx); return err; diff --git a/gpgme/gpgme.h b/gpgme/gpgme.h index 7d92443b..7334bfce 100644 --- a/gpgme/gpgme.h +++ b/gpgme/gpgme.h @@ -86,16 +86,14 @@ typedef enum GPGME_Not_Implemented = 0x0009, GPGME_Read_Error = 0x000a, GPGME_Write_Error = 0x000b, - GPGME_Invalid_Type = 0x000c, - GPGME_Invalid_Mode = 0x000d, - GPGME_File_Error = 0x000e, /* errno is set in this case. */ - GPGME_Decryption_Failed = 0x000f, - GPGME_Bad_Passphrase = 0x0010, - GPGME_Canceled = 0x0011, - GPGME_Invalid_Key = 0x0012, - GPGME_Invalid_Engine = 0x0013, - GPGME_No_UserID = 0x0014, - GPGME_Invalid_UserID = 0x0015, + GPGME_File_Error = 0x000c, /* errno is set in this case. */ + GPGME_Decryption_Failed = 0x000d, + GPGME_Bad_Passphrase = 0x000e, + GPGME_Canceled = 0x000f, + GPGME_Invalid_Key = 0x0010, + GPGME_Invalid_Engine = 0x0011, + GPGME_No_UserID = 0x0012, + GPGME_Invalid_UserID = 0x0013, /* Reasons for invalid user id. */ GPGME_Unknown_Reason = 0x0100, @@ -130,17 +128,6 @@ GpgmeError; #define GPGME_Invalid_Recipient GPGME_Invalid_UserID #define GPGME_No_Passphrase GPGME_Bad_Passphrase -/* The possible types of GpgmeData objects. */ -typedef enum - { - GPGME_DATA_TYPE_NONE = 0, - GPGME_DATA_TYPE_MEM = 1, - GPGME_DATA_TYPE_FD = 2, - GPGME_DATA_TYPE_FILE = 3, - GPGME_DATA_TYPE_CB = 4 - } -GpgmeDataType; - /* The possible encoding mode of GpgmeData objects. */ typedef enum {