masqmail
diff src/accept.c @ 298:6281ff92cb86
refactoring
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Thu, 09 Dec 2010 13:20:14 -0300 |
parents | bb3005ce0837 |
children | ca2d11aec2a3 |
line diff
1.1 --- a/src/accept.c Thu Dec 09 11:41:49 2010 -0300 1.2 +++ b/src/accept.c Thu Dec 09 13:20:14 2010 -0300 1.3 @@ -191,26 +191,23 @@ 1.4 1.5 /* create unique message id */ 1.6 msg->uid = g_malloc(14); 1.7 - 1.8 string_base62(msg->uid, rec_time, 6); 1.9 msg->uid[6] = '-'; 1.10 - string_base62(&(msg->uid[7]), getpid(), 3); 1.11 + string_base62(msg->uid + 7, getpid(), 3); 1.12 msg->uid[10] = '-'; 1.13 - string_base62(&(msg->uid[11]), msg->transfer_id, 2); 1.14 - msg->uid[13] = 0; 1.15 + string_base62(msg->uid + 11, msg->transfer_id, 2); 1.16 + msg->uid[13] = '\0'; 1.17 1.18 - /* if local, get password entry */ 1.19 - if (msg->received_host == NULL) { 1.20 + /* if local, get password entry and set return path if missing */ 1.21 + if (!msg->received_host) { 1.22 passwd = g_memdup(getpwuid(geteuid()), sizeof(struct passwd)); 1.23 msg->ident = g_strdup(passwd->pw_name); 1.24 - } 1.25 - 1.26 - /* set return path if local */ 1.27 - if (msg->return_path == NULL && msg->received_host == NULL) { 1.28 - gchar *path = g_strdup_printf("<%s@%s>", passwd->pw_name, conf.host_name); 1.29 - DEBUG(3) debugf("setting return_path for local accept: %s\n", path); 1.30 - msg->return_path = create_address(path, TRUE); 1.31 - g_free(path); 1.32 + if (!msg->return_path) { 1.33 + gchar *path = g_strdup_printf("<%s@%s>", passwd->pw_name, conf.host_name); 1.34 + DEBUG(3) debugf("setting return_path for local accept: %s\n", path); 1.35 + msg->return_path = create_address(path, TRUE); 1.36 + g_free(path); 1.37 + } 1.38 } 1.39 1.40 /* scan headers */ 1.41 @@ -224,7 +221,8 @@ 1.42 header *hdr; 1.43 1.44 for (hdr_node = g_list_first(msg->hdr_list); 1.45 - hdr_node != NULL; hdr_node = hdr_node_next) { 1.46 + hdr_node; 1.47 + hdr_node = hdr_node_next) { 1.48 hdr_node_next = g_list_next(hdr_node); 1.49 hdr = ((header *) (hdr_node->data)); 1.50 DEBUG(5) debugf("scanning headers: %s", hdr->header); 1.51 @@ -287,16 +285,20 @@ 1.52 } 1.53 } 1.54 1.55 - if (msg->return_path == NULL) { 1.56 - /* this can happen for pop3 accept only and if no Return-path: header was given */ 1.57 + if (!msg->return_path) { 1.58 + /* TODO: do we still need this as we don't fetch 1.59 + mail anymore? */ 1.60 + /* this can happen for pop3 accept only and if no 1.61 + Return-Path: header was given */ 1.62 GList *hdr_list; 1.63 header *hdr; 1.64 1.65 DEBUG(3) debugf("return_path == NULL\n"); 1.66 1.67 hdr_list = find_header(msg->hdr_list, HEAD_SENDER, NULL); 1.68 - if (!hdr_list) 1.69 + if (!hdr_list) { 1.70 hdr_list = find_header(msg->hdr_list, HEAD_FROM, NULL); 1.71 + } 1.72 if (hdr_list) { 1.73 gchar *addr; 1.74 hdr = (header *) (g_list_first(hdr_list)->data); 1.75 @@ -306,19 +308,19 @@ 1.76 addr = g_strdup(hdr->value); 1.77 g_strchomp(addr); 1.78 1.79 - if ((msg->return_path = create_address_qualified(addr, FALSE, msg->received_host)) != NULL) { 1.80 + msg->return_path = create_address_qualified(addr, FALSE, msg->received_host)); 1.81 + if (msg->return_path) { 1.82 DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path)); 1.83 - msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_UNKNOWN, 1.84 - "X-Warning: return path set from %s address\n", 1.85 - hdr->id == HEAD_SENDER ? "Sender:" : "From:")); 1.86 + msg->hdr_list = g_list_append( msg->hdr_list, create_header(HEAD_UNKNOWN, "X-Warning: return path set from %s address\n", hdr->id == HEAD_SENDER ? "Sender:" : "From:")); 1.87 } 1.88 g_free(addr); 1.89 } 1.90 - if (msg->return_path == NULL) { /* no Sender: or From: or create_address_qualified failed */ 1.91 + if (!msg->return_path) { 1.92 + /* no Sender: or From: or 1.93 + create_address_qualified failed */ 1.94 msg->return_path = create_address_qualified("postmaster", TRUE, conf.host_name); 1.95 DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path)); 1.96 - msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_UNKNOWN, 1.97 - "X-Warning: real return path is unknown\n")); 1.98 + msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_UNKNOWN, "X-Warning: real return path is unknown\n")); 1.99 } 1.100 } 1.101 1.102 @@ -328,17 +330,13 @@ 1.103 return AERR_NORCPT; 1.104 } 1.105 1.106 - if (!(has_sender || has_from)) { 1.107 - DEBUG(3) debugf("adding 'From' header\n"); 1.108 - msg->hdr_list = g_list_append(msg->hdr_list, 1.109 - msg->full_sender_name 1.110 - ? 1.111 - create_header(HEAD_FROM, "From: \"%s\" <%s@%s>\n", msg->full_sender_name, 1.112 - msg->return_path->local_part, msg->return_path->domain) 1.113 - : 1.114 - create_header(HEAD_FROM, "From: <%s@%s>\n", 1.115 - msg->return_path->local_part, msg->return_path->domain) 1.116 - ); 1.117 + if (!has_sender && !has_from)) { 1.118 + DEBUG(3) debugf("adding 'From:' header\n"); 1.119 + if (msg->full_sender_name) { 1.120 + msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_FROM, "From: \"%s\" <%s@%s>\n", msg->full_sender_name, msg->return_path->local_part, msg->return_path->domain)); 1.121 + } else { 1.122 + msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_FROM, "From: <%s@%s>\n", msg->return_path->local_part, msg->return_path->domain)); 1.123 + } 1.124 } 1.125 if (!has_to_or_cc) { 1.126 DEBUG(3) debugf("no To: or Cc: header, hence adding `To: undisclosed recipients:;'\n"); 1.127 @@ -350,13 +348,13 @@ 1.128 } 1.129 if (!has_id) { 1.130 DEBUG(3) debugf("adding 'Message-ID:' header\n"); 1.131 - msg->hdr_list = g_list_append(msg->hdr_list, 1.132 - create_header(HEAD_MESSAGE_ID, "Message-ID: <%s@%s>\n", msg->uid, conf.host_name)); 1.133 + msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_MESSAGE_ID, "Message-ID: <%s@%s>\n", msg->uid, conf.host_name)); 1.134 } 1.135 } 1.136 1.137 /* Received header: */ 1.138 /* At this point because we have to know the rcpts for the 'for' part */ 1.139 + /* The `for' part will only be used if exactly one rcpt is present. */ 1.140 gchar *for_string = NULL; 1.141 header *hdr = NULL; 1.142 1.143 @@ -364,7 +362,7 @@ 1.144 1.145 if (g_list_length(msg->rcpt_list) == 1) { 1.146 address *addr = (address *) (g_list_first(msg->rcpt_list)->data); 1.147 - for_string = g_strdup_printf(" for %s", addr_string(addr)); 1.148 + for_string = g_strdup_printf("\n\tfor %s", addr_string(addr)); 1.149 } 1.150 1.151 if (!msg->received_host) {