• Patch: Elm ME+ 2.5 PLalpha48 -> Elm ME+ 2.5 PLalpha49 [7/9] (2/5)

    From Kari Hurtta@21:1/5 to All on Thu Jan 3 16:44:26 2019
    [continued from previous message]

    + "rewrite_env_from_domain: No address, domain %s not used, rewriting canceled\n",
    + new_domain));
    + ret = 0;
    +
    + goto fail;
    + }
    +
    + if (env_from_domain &&
    + 0 == strcmp(env_from_domain,new_domain)) {
    +
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: Rewriting not needed, canceled\n"));
    +
    + ret = 0;
    +
    + goto fail;
    + }
    +
    + if (env_from_addr) {
    + const char * value1 = env_from_addr;
    + char * buffer1 = NULL;
    + char * new_address = NULL;
    +
    + const char * p;
    +
    + if ('<' == env_from_addr[0]) {
    + int l = strlen(env_from_addr);
    +
    + if (l < 2 || '>' != env_from_addr[l-1]) {
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: Bad address, domain %s not used, rewriting canceled\n",
    + new_domain));
    + ret = 0;
    + goto fail2;
    + }
    + buffer1 = safe_malloc(l);
    + if (l > 2) {
    + memcpy(buffer1,env_from_addr+1,l-2);
    + }
    + buffer1[l-2] = '\0';
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: stripping address %s => %s\n",
    + env_from_addr,buffer1));
    + value1 = buffer1;
    + }
    +
    + p = qstrpbrk_c(value1,"@");
    + if (p) {
    + if (p > value1) {
    + int len = p - value1;
    +
    + new_address =
    + elm_message(FRM("%.*s@%s"),
    + len,value1,new_domain);
    +
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: setting domain, address %s => %s\n",
    + value1,new_address));
    +
    + } else {
    + /* If first character is @ then this is routed address,
    + do not change
    + */
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: Unsupported address, domain %s not used, rewriting canceled\n",
    + new_domain));
    + ret = 0;
    + goto fail2;
    + }
    +
    + } else {
    + new_address =
    + elm_message(FRM("%s@%s"),
    + value1,new_domain);
    +
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: adding domain, address %s => %s\n",
    + value1,new_address));
    + }
    +
    + if (new_address) {
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: changing address %s => %s\n",
    + env_from_addr,new_address));
    +
    + ret = mailer_env_from_change(env_from,new_address);
    + if (ret) {
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain: return path address changed\n"));
    + }
    + }
    +
    + fail2:
    + if (buffer1) {
    + free(buffer1);
    + buffer1 = NULL;
    + }
    +
    + if (new_address) {
    + free(new_address);
    + new_address = NULL;
    + }
    + }
    +
    + fail:
    +
    + env_from_addr = mailer_env_from_value(env_from,NULL);
    + DPRINT(Debug,8,(&Debug,
    + "rewrite_env_from_domain=%d",
    + ret));
    + if (env_from_addr) {
    + DPRINT(Debug,8,(&Debug,"; return path address=%s",
    + env_from_addr));
    + }
    + DPRINT(Debug,8,(&Debug,"\n"));
    +
    + return ret;
    + }
    +
    static enum verify_trans_result
    verify_transmission P_((char *filename,
    int already_has_text,
    ***************
    *** 78,93 ****
    struct Attachments *attachments,
    charset_t file_set,
    struct mailer_info *mailer_info,
    ! charset_t hdr_charset,
    ! struct MailboxView *mailbox,
    ! int encode_hdr,
    struct AliasView *aview,
    struct menu_context *page,
    struct menu_context *prompt_area,
    struct header_rec *parent_message,
    const struct remote_server * remote_server,
    int *PGP_status,
    ! struct elm_commands *snd_cmds));

    static void mail_sent P_((union any_fd fd, char * title, struct run_state *rs,
    int ret, int exit_stat));
    --- 282,299 ----
    struct Attachments *attachments,
    charset_t file_set,
    struct mailer_info *mailer_info,
    ! mime_send_t *mime_info,
    ! struct MailboxView *mailbox,
    struct AliasView *aview,
    struct menu_context *page,
    struct menu_context *prompt_area,
    struct header_rec *parent_message,
    const struct remote_server * remote_server,
    int *PGP_status,
    ! struct elm_commands *snd_cmds,
    ! enum rp_classify_domain * env_from_domain_class_p,
    ! struct classify_domain_result * env_from_cdr
    ! ));

    static void mail_sent P_((union any_fd fd, char * title, struct run_state *rs,
    int ret, int exit_stat));
    ***************
    *** 1263,1274 ****
    static void add_self_addr P_((struct expanded_address * cc_or_bcc,
    struct address * usraddr,
    struct mailer_info * mailer_info,
    ! struct expanded_address * from));
    ! static void add_self_addr(cc_or_bcc,usraddr,mailer_info,fr