diff --git a/src/message_api.c b/src/message_api.c index 4802a9bf..0f78fd0f 100644 --- a/src/message_api.c +++ b/src/message_api.c @@ -2749,93 +2749,38 @@ DYNAMIC_API PEP_STATUS encrypt_message( // Update the identities and gather key and version information // for sending // - if (enc_format != PEP_enc_none && (_il = src->bcc) && _il->ident) - // BCC limited support: +# define UPDATE_STATE_FOR_IDENT_LIST_AND_JUMP_ON_ERROR(ident_list_actual) \ + do { \ + identity_list *ident_list = (ident_list_actual); \ + if (ident_list) { \ + _status = _update_state_for_ident_list( \ + session, src->from, ident_list, \ + &_k, \ + &max_comm_type, \ + &max_version_major, \ + &max_version_minor, \ + &has_pEp_user, \ + &dest_keys_found, \ + false \ + ); \ + switch (_status) { \ + case PEP_PASSPHRASE_REQUIRED: \ + case PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED: \ + case PEP_WRONG_PASSPHRASE: \ + goto pEp_error; \ + case PEP_STATUS_OK: \ + break; \ + default: \ + status = PEP_UNENCRYPTED; \ + goto pEp_error; \ + } \ + } \ + } while (false) { - // - App splits mails with BCC in multiple mails. - // - Each email is encrypted separately - if(_il->next || (src->to && src->to->ident) || (src->cc && src->cc->ident)) - { - // Only one Bcc with no other recipient allowed for now - return PEP_ILLEGAL_VALUE; - } - - // If you think this call is a beast, try the cut-and-pasted code 3 x - PEP_STATUS _status = _update_state_for_ident_list( - session, src->from, _il, - &_k, - &max_comm_type, - &max_version_major, - &max_version_minor, - &has_pEp_user, - &dest_keys_found, - true); - - switch (_status) { - case PEP_PASSPHRASE_REQUIRED: - case PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED: - case PEP_WRONG_PASSPHRASE: - status = _status; - goto pEp_error; - case PEP_STATUS_OK: - break; - default: - status = PEP_UNENCRYPTED; - goto pEp_error; - } - } - else // Non BCC - { - - // If you think this call is a beast, try the cut-and-pasted code 3 x PEP_STATUS _status = PEP_STATUS_OK; - - if (src->to) { - _status = _update_state_for_ident_list( - session, src->from, src->to, - &_k, - &max_comm_type, - &max_version_major, - &max_version_minor, - &has_pEp_user, - &dest_keys_found, - false - ); - switch (_status) { - case PEP_PASSPHRASE_REQUIRED: - case PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED: - case PEP_WRONG_PASSPHRASE: - goto pEp_error; - case PEP_STATUS_OK: - break; - default: - status = PEP_UNENCRYPTED; - goto pEp_error; - } - } - if (src->cc) { - _status = _update_state_for_ident_list( - session, src->from, src->cc, - &_k, - &max_comm_type, - &max_version_major, - &max_version_minor, - &has_pEp_user, - &dest_keys_found, - false - ); - switch (_status) { - case PEP_PASSPHRASE_REQUIRED: - case PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED: - case PEP_WRONG_PASSPHRASE: - goto pEp_error; - case PEP_STATUS_OK: - break; - default: - status = PEP_UNENCRYPTED; - goto pEp_error; - } - } + UPDATE_STATE_FOR_IDENT_LIST_AND_JUMP_ON_ERROR (src->to); + UPDATE_STATE_FOR_IDENT_LIST_AND_JUMP_ON_ERROR (src->cc); + UPDATE_STATE_FOR_IDENT_LIST_AND_JUMP_ON_ERROR (src->bcc); } if (max_version_major < 2)