aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* json: Fix memory errors in create_keylist_patternsAndre Heinecke2018-07-181-5/+4
| | | | | | | | | | | * src/gpgme-json.c (create_keylist_patterns): Reserve two pointers more then linefeeds. (create_keylist_patterns): Fix loop to count linebreaks. (create_keylist_patterns): Use calloc for good measure. -- This fixes crashes and memory corruption as cnt did not match i.
* json: Fix crash on invalid jsonAndre Heinecke2018-07-161-2/+2
| | | | | | | | | * src/gpgme-json.c (process_request): Init res. Check for json object before encode and chunk. -- If json is invalid we can't read chunksize and would crash in encode and chunk.
* json: Fix uninitialized key unref in op_deleteAndre Heinecke2018-07-161-1/+1
| | | | * src/gpgme-json.c (op_delete): Init key.
* json: Minor cleanups in cJSON.cWerner Koch2018-07-161-5/+23
| | | | | | | | * src/cJSON.c: Add comments on the origin of the code. (parse_string): Allocate an extra byte for safeness. (cJSON_AddItemToArray): Allo ARRAY to be NULL. Signed-off-by: Werner Koch <[email protected]>
* json: Fix buffer overflow in cJSON.cWerner Koch2018-07-161-3/+8
| | | | | | | | | | | | | | | * src/cJSON.c (parse_string): Correctly detect bad hex. -- The call to parse_hex4 checks that only hex digits follow and in the error case returns 0. However, by the time of the combined check for an invalid value and the error PTR has already been set to the last hex character and thus if the end-of-string or a quote character was one of the bad hex digits the loop will miss the end of the string which does not match with the simple buffer length allocation test at the begin of the function. Signed-off-by: Werner Koch <[email protected]>
* json: Add with-sec-fprs param to exportAndre Heinecke2018-07-111-5/+68
| | | | | | | | | | | | | | | * src/gpgme-json.c (add_secret_fprs): New helper. (op_export, hlp_export): Extend for with-sec fprs. -- This is a request from Mailvelope, to import an export they need the information for which keys from the export a secret key is also available. For simplicity it is much preferred to get this information in a single call without the need to do and parse a keylisting additionally in a second native-messaging call. So we make it optional to include that info in the export.
* json: Add with-secret without secret onlyAndre Heinecke2018-07-091-4/+11
| | | | | * src/gpgme-json.c (op_keylist, hlp_keylist): Add "with-secret" as a flag to do a public keylist with secret information.
* Add ctx flag for auto-key-locateAndre Heinecke2018-07-093-0/+38
| | | | | | | | | | | | | | | | | | | * src/context.h (gpgme_context): Add auto_key_locate. * src/engine-gpg.c (engine_gpg): Add auto_key_locate. (gpg_set_engine_flags, build_argv): Handle auto_key_locate. (gpg_release): Free auto_key_locate. * src/gpgme.c (gpgme_release): Free auto_key_locate. (gpgme_get_ctx_flag, gpgme_set_ctx_flag): Handle auto-key-locate. * doc/gpgme.texi: Document auto-key-locate flag. * tests/run-keylist.c (show_usage, main): Add --from-wkd option. -- This enables users of GPGME to control more fine grained what auto-key-locate does. Especially for WKD lookups / refreshes can this be useful. GnuPG-Bug-Id: T2917 Differential Revision: https://dev.gnupg.org/D463
* core: Add gpg auditlog to get diagnosticsAndre Heinecke2018-07-054-4/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/engine-gpg.c (engine_gpg): Add diagnostics member. (gpg_release): Release diagnostics data. (gpg_new): Set up logger-fd and diagnostics. (gpg_getauditlog): New. Copy diagnostics to a user data. (engine_ops): Add getauditlog. * src/engine-gpgsm.c (gpgsm_getauditlog): Return not implemented for GPGME_AUDITLOG_DIAG. * src/getauditlog.c (getauditlog_start): Don't reset engine for diagnostics. * src/gpgme.h.in (GPGME_AUDITLOG_DIAG): New. (GPGME_AUDITLOG_DEFAULT): New alias to 0. * tests/run-decrypt.c (show_usage, main): Add --diagnostics. * doc/gpgme.texi(Additional Logs): Document getauditlog. -- This enables users of GPGME to get more verbose information from gpg which can assist users in figuring out a problem that was before hidden behind a generalized error like "Decryption Failed". For GPGSM it is not yet available as it is problematic to get it properly in server mode and GPGSM already had the original audit log mechanism in place. GPGME_AUDITLOG_DEFAULT was added for a more explicit documentation.
* json: Add keylist mode locateAndre Heinecke2018-07-041-0/+6
| | | | | | | | * src/gpgme-json.c (op_keylist, hlp_keylist): Add locate. -- The same rationale for the KEYLIST_MODE_LOCATE in GPGME also applies here. It makes the API a little less magic.
* json: Add file handling for debug outputAndre Heinecke2018-06-201-2/+16
| | | | | | | | | | | | | | | * src/gpgme-json.c (main): Add possibilty to set log file. -- This is similar to how GPGME_DEBUG works. It takes ; on Windows as seperator and : on linux. Followed by a file name. For Linux it might make sense to use a different seperator to allow setting a socket explicitly. But this is better in line with the current GPGME_DEBUG behavior. The change helps on Windows where we don't have a log socket.
* json: Return fingerprint as createkey resultAndre Heinecke2018-06-081-2/+10
| | | | * src/gpgme-json.c (op_createkey): Return fingerprint of new key.
* json: Add op_createkeyAndre Heinecke2018-06-081-0/+86
| | | | | | | | | | | * src/gpgme-json.c (hlp_createkey, op_createkey): New. (process_request, hlp_help): Add it. -- This uses an unrestricted context for now until GnuPG-Bug-Id: T4010 is implemented in GnuPG.
* json: Generalize chunking and getmoreAndre Heinecke2018-06-081-125/+141
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/gpgme-json.c (MIN_REPLY_CHUNK_SIZE): Lower value to new real minimum. (DEF_REPLY_CHUNK_SIZE): Don't chunk by default. (pending_data): Remove type and base64. (make_data_object): Remove chunksize handling as this is now generic. (encode_and_chunk): Setup the pending_data buffer for chunking if required. (op_getmore): Changed to generically work on a response. (hlp_getmore): Update accordingly. (hlp_help): Document chunksize as generic parameter for all commands. (process_request): Use encode_and_chunk on the response. (hlp_encrypt, op_encrypt, hlp_decrypt, op_decrypt), (hlp_verify, op_verify, hlp_sign, op_sign), (op_keylist, hlp_keylist, hlp_export, op_export): Update accordingly. -- To include handling for json properties e.g. in a keylist in the chunk mechanism the mechanism is now more general. If the chunksize property is provided the response will always look exactly like a "getmore" response. E.g. e.g.: { "op": "keylist", "chunksize": 64 } Results in: { "more": true, "base64": true, "response": "ewoJImtleXMiOglbewoJCQkicmV2b2tlZCI6" } For simplicity this is even true if the chunksize is larger then the response. The client has to combine all "response" chunks and base64 decode them to get valid json. The complete response (including json) is never larger then the chunksize but might be smaller. Except for interactive use due to additional format characters.
* json: Rework verify_result_to_jsonAndre Heinecke2018-06-071-39/+159
| | | | | | | | | | | | * src/gpgme-json.c (sigsum_to_json): Add bool repr. (signature_to_json, verify_result_to_json): Extend and follow better pattern. (hlp_decrypt, hlp_verify): Expand doc. -- This should make it more clear which values are mapped as the naming is more direct and clear and help to use the gpgme documentation to understand the verify_result values.
* json: Add direct way to query a config optionAndre Heinecke2018-06-071-12/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/gpgme-json.c (op_config_opt, hlp_config_opt): New operation. (process_request, hlp_help): Add it. -- This is more conveniant API for most query operations where a single option is required. An example would be: { "op": "config_opt", "component": "gpg", "option": "default-key" } Which results in: { "option": { "name": "default-key", "description": "use NAME as default secret key", "argname": "NAME", "flags": 0, "level": 0, "type": 1, "alt_type": 1, "value": [{ "string": "F462B6B1", "is_none": false }] } }
* json: Add op_config to query gpgconfAndre Heinecke2018-06-071-1/+207
| | | | | | | * src/gpgme-json.c (op_config, hlp_config): New. (hlp_help, process_request): Add config. (conf_arg_to_json, conf_opt_to_json, conf_comp_to_json): New helpers.
* core: Return a better error code on certain decryption failures.Werner Koch2018-06-061-12/+47
| | | | | | | | | | | * src/decrypt.c (op_data_t): Add field first_status_error. (parse_status_error): Set it. (_gpgme_decrypt_status_handler): Prefer an ERROR code over a NO_SECKEY. -- GnuPG-bug-id: 3983 Signed-off-by: Werner Koch <[email protected]>
* json: Allow to compile with libgpg-error < 1.28Werner Koch2018-06-051-2/+2
| | | | | | | | | | | | | | | | * src/cJSON.c: Use gpgrt fucntion only if available. -- We have a hack in gpgme-json to allow building with older libgpg-error versions. That whole thing will not work but the instead the binary will print an error at runtime that it needs to be build with a newer libgcrypt. There was a little bug here for the Debian packages libgpg-error versions which failed to build cJSON. cJSON is only needed be the full gpgme-json but nevertheless the Makefile wants to build it. The fix is straightforward. GnuPG-bug-id: 3971 Signed-off-by: Werner Koch <[email protected]>
* core: New context flag "ignore-mdc-error".Werner Koch2018-05-315-2/+35
| | | | | | | | | | | | | | | | | * src/context.h (gpgme_context): Add field ignore_mdc_error. * src/gpgme.c (gpgme_set_ctx_flag, gpgme_get_ctx_flag): Set/get it. * src/engine-gpg.c (engine_gpg): Add flags.ignore_mdc_error. (gpg_set_engine_flags): Set it. (build_argv): Pass option to gpg. * src/decrypt.c (_gpgme_decrypt_status_handler): Take care of flag. (gpgme_op_decrypt_result): Clear flag. (gpgme_op_decrypt): Clear flag. * src/decrypt-verify.c (gpgme_op_decrypt_verify): Clear flag (gpgme_op_decrypt_ext): Clear flag. * tests/run-decrypt.c (show_usage): Add option --ignore-mdc-error. Signed-off-by: Werner Koch <[email protected]>
* core: New decryption result flag 'legacy_cipher_nomdc'.Werner Koch2018-05-312-2/+11
| | | | | | | | | | * src/gpgme.h.in (_gpgme_op_decrypt_result): Add flag legacy_cipher_nomdc. * src/decrypt.c (parse_status_error): Set this flag. * tests/run-decrypt.c (print_result): print it. (main): Print the result even on error. Signed-off-by: Werner Koch <[email protected]>
* core: Remove cruft from the engine-gpg code.Werner Koch2018-05-3113-78/+23
| | | | | | | | | | | | | | | | * src/engine-gpg.c (read_status): Remove the handling of GPGME_STATUS_END_STREAM; this was used only by the former experimental --pipemode of gpg but that is not even anymore invoked here. (struct engine_gpg): Remove cmd.linked_data and .linked_idx. (build_argv): Remove code for linked_data. (gpg_new): Ditto. (gpg_set_command_handler): Remove arr linked_data. * src/engine-backend.h (engine_ops): Remove arg data from set_command_handler. * src/engine.c (_gpgme_engine_set_command_handler): Remove arg linked_data and adjust all callers. Signed-off-by: Werner Koch <[email protected]>
* core: Minor cleanup in engine-gpg and -gpgsm.Werner Koch2018-05-312-6/+3
| | | | | | | | | | * src/engine-gpg.c: Remove errno.h. (build_argv): Use gpg_error_from_syserror instead of ERRNO. * src/engine-gpgsm.c: Remove errno.h. (status_handler): Remove check for EINTR; gpgme_data_write already handles EINTR. Signed-off-by: Werner Koch <[email protected]>
* json: Fix compiler warning.Werner Koch2018-05-281-0/+4
| | | | | | * src/gpgme-json.c (op_version): Mark request as unused. Signed-off-by: Werner Koch <[email protected]>
* json: Do not allow to export or delete secret keys.Werner Koch2018-05-281-7/+11
| | | | | | | | | | | | | | | | * src/gpgme-json.c (op_export, op_delete): Return GPG_ERR_FORBIDDEN if "secret" is used. -- This should not be possible from a browser and we need to make this fully clear. Actually gpg-agent won't allow that anyway but having this explicitly is better. If that is ever needed a dedicated command line option may enable this, for example when used by regular programs and not by the browser. But that requires other changes as well. Signed-off-by: Werner Koch <[email protected]>
* json: Fix use of get_context.Werner Koch2018-05-281-11/+48
| | | | | | | | | | | | | | * src/gpgme-json.c (create_onetime_context): New. (release_onetime_context): New. (op_sign): Use the new fucntions to create a separate context. (op_encrypt): Use a separate context for key listings. (create_keylist_patterns): Remove unneeded cast. -- get_context retruns a static per-process context and can thus not be used as a separate context. Use dedicated fucntions for this. Signed-off-by: Werner Koch <[email protected]>
* json: Implement encrypt-signAndre Heinecke2018-05-251-14/+60
| | | | | | | | | * src/gpgme-json.c (op_encrypt): Add optional signing_keys param. (get_keys, create_keylist_patterns): Add param for json object name. -- If the optional parameter signing_keys is provided to encrypt it becomes an encrypt-sign operation.
* json: Implement delete commandAndre Heinecke2018-05-251-0/+72
| | | | | | | | | * src/gpgme-json.c (op_delete): New. (hlp_help, process_request): Add it. -- As with import / export delete also does not work for the browser origin.
* json: Implement op_exportAndre Heinecke2018-05-251-1/+111
| | | | | | | | * src/gpgme-json.c (op_export): New. (hlp_getmore, process_request): Add it. -- Secret key export does not work with request-origin browser.
* json: Fix double ctx allocAndre Heinecke2018-05-251-3/+0
| | | | * src/gpgme-json.c (op_keylist): Only get one ctx.
* json: Add guard in create_keylist_patternsAndre Heinecke2018-05-251-1/+1
| | | | | * src/gpgme-json.c (create_keylist_patterns): Guard against a string ending with a linbreak.
* json: Implement import operationAndre Heinecke2018-05-251-1/+126
| | | | | | * src/gpgme-json.c (op_import): New. (import_status_to_json, import_result_to_json): New. (hlp_help, process_request): Add import.
* json: Improve keylist helpAndre Heinecke2018-05-251-2/+3
| | | | * src/gpgme-json.c (hlp_keylist): Clarify doc about keys parameter.
* json: Fix keylist pattern handlingAndre Heinecke2018-05-251-20/+64
| | | | | | * src/gpgme-json.c (xfree_array): New helper. (create_keylist_patterns): Convert keystring to gpgme patterns. (op_sign, op_keylist): Use it.
* json: Add additional commands to helpAndre Heinecke2018-05-251-0/+3
| | | | * src/gpgme-json.c (hlp_help): Add additional commands.
* json: Refactor signature and ei codeAndre Heinecke2018-05-251-162/+81
| | | | | | | | | | | | | | * src/gpgme-json.c (add_summary_to_object): Changed to: sigsum_to_json. (add_signature_to_object): Changed to signature_to_json. (add_signatures_to_object): Changed to verify_result_to_json. (add_ei_to_object): Changed to engine_info_to_json. (op_decrypt, op_verify, op_version): Use new functions. -- This pattern of gpgme_type to json object conversion is much cleaner then the error returning "add to object" functions.
* json: Implement keylistAndre Heinecke2018-05-251-18/+486
| | | | | | | | | | | | | | | | | | | * src/gpgme-json.c (xjson_AddStringToObject0) (xjson_AddItemToObject): New helpers. (sig_notation_to_json, key_sig_to_json, tofu_to_json) (uid_to_json, subkey_to_json, key_to_json): New GPGME to JSON functions. (op_keylist): New. (process_request): Add op_keylist. -- The conversion from GPGME data structures to JSON follow the same pattern for the keylist functions using the xjson wrappers instead of error checking every cJSON call. For large keylists the keylist command also needs a data / getmore handling somehow.
* json: Deduplicate input handling codeAndre Heinecke2018-05-251-184/+62
| | | | | | | | | * gpgme-json.c (get_string_data): New. (op_verify, op_sign, op_decrypt, op_encrypt): Use it. -- This handles the common base64 decoding and creation of the gpgme_data object.
* json: Add code to gpg_error based messagesAndre Heinecke2018-05-241-50/+104
| | | | | | | | | | * src/gpgme-json.c (gpg_error_object): New. (error_object_v): Extend to take error. -- Having the error code is helpful, especially as the strerrors are localized. E.g. to detect an ERROR_CANCELED.
* json: Implement op_versionAndre Heinecke2018-05-241-0/+86
| | | | | | * src/gpgme-json.c (op_version): New. (process_request): Extend for version. (protocol_to_string, add_ei_to_object): New helpers.
* json: Implement op_verifyAndre Heinecke2018-05-241-1/+158
| | | | | | | | | | * src/gpgme-json.c (op_verify): New. (hlp_help): Add verify. (process_request): Add verify. -- Mostly works, except for detached, base64 encoded signatures, they are somehow not yet written to gpgme.
* json: Put signature info before data outputAndre Heinecke2018-05-241-9/+9
| | | | | | | | * src/gpgme-json.c (op_decrypt): Move info before data. -- This should enable it to first parse signatures before handling very large chunks of data.
* json: Add sign to helpAndre Heinecke2018-05-241-0/+1
| | | | * src/gpgme-json.c (hlp_help): Add sign.
* json: Add op_signAndre Heinecke2018-05-241-0/+177
| | | | * src/gpgme-json.c (op_sign): New.
* json: Fix invalid function callAndre Heinecke2018-05-241-1/+1
| | | | | | | | | * src/gpgme-json.c (add_signatures_to_object): Fix call to xjson_CreateArray. -- That is what happens if you edit code while reviewing changes, without testing it again,..
* json: Print signatures for decrypt/verifyAndre Heinecke2018-05-241-0/+211
| | | | | | | | | * gpgme-json.c (xJSON_CreateArray), (add_summary_to_object, validity_to_string): New helpers. (add_signature_to_object, add_signatures_to_object) (add_signatures_object): New. (op_decrypt): Handle verify_result. (hlp_help): Mention decrypt.
* json: Minor typo fixesAndre Heinecke2018-05-241-3/+3
| | | | * src/gpgme-json.c: Minor typo fixes.
* core, w32: Add w64 handling for regkeysAndre Heinecke2018-05-171-3/+22
| | | | | | | | | | | | | | | * src/w32-util.c (_gpgme_get_gpg_path): Use new defines. (GNUPG_REGKEY_2): x64 aware regkey as used by GnuPG in Gpg4win 2.x (GNUPG_REGKEY_3): x64 aware regkey as used by GnuPG in Gpg4win 3.x (_gpgme_get_gpgconf_path): Use new regkeys. Add another fallback. -- This should fix more "unsupported protocol" issues if Gpg4win / GnuPG is installed in a non standard path on 64bit systems. The regkey handling is similar to that of gpgex and gpgol. GnuPG-Bug-Id: T3988
* core: Always fail if an OpenPG message is not integrity protected.Werner Koch2018-05-171-7/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | * src/decrypt.c (struct op_data_t): Add field not_integrity_protected. (parse_decryption_info): Set this. Also rename mode to aead_algo for clarity. (_gpgme_decrypt_status_handler): Force failure in case of a missing MDC. -- This extra check makes sure that a missing or stripped MDC in - gpg < 2.1 - or gpg 2.2 with an old cipher algorithm will lead to a decryption failure. gpg 2.3 will always fail in this case. Implementing this check here and not backporting the 2.3 change to 2.2 has the benefit that all GPGME using applications are protected but scripts relying on rfc2440 (i.e. without MDC) will only break when migrating to 2.3. Note that S/MIME has no integrity protection mechanism but gpgsm neither emits a DECRYPTION_INFO status line, so an error will not be triggered. If in the future gpgsm supports authenticated encryption it may issue a DECRYPTION_INFO line to force a failure here but it will in that case also emit a DECRYPTION_FAILED anyway. GnuPG-bug-id: 3981 Signed-off-by: Werner Koch <[email protected]>
* json: Improve auto-base64 encoding to not split UTF-8 chars.Werner Koch2018-05-091-8/+14
| | | | | | | * src/gpgme-json.c (make_data_object): Switch to Base64 also for UTF-8 characters. Signed-off-by: Werner Koch <[email protected]>