annotate src/prepstdreply.c @ 778:af2d036b7d0c

Insignificant change: zero is a valid file descriptor
author Ben Schmidt
date Mon, 15 Nov 2010 09:31:15 +1100
parents ecb991e41a4c
children 6f8df4842d91
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
190
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
1 /* Copyright (C) 2004 Mads Martin Joergensen <mmj at mmj.dk>
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
2 * Copyright (C) 2007 Morten K. Poulsen <morten at afdelingp.dk>
190
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
3 *
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
4 * $Id$
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
5 *
225
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
7 * of this software and associated documentation files (the "Software"), to
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
8 * deal in the Software without restriction, including without limitation the
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
10 * sell copies of the Software, and to permit persons to whom the Software is
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
11 * furnished to do so, subject to the following conditions:
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
12 *
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
13 * The above copyright notice and this permission notice shall be included in
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
14 * all copies or substantial portions of the Software.
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
15 *
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 190
diff changeset
22 * IN THE SOFTWARE.
190
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
23 */
c37f95babe75 Add GPL header
mmj
parents: 189
diff changeset
24
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
25 #include <stdlib.h>
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
26 #include <stdio.h>
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
27 #include <unistd.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
28 #include <sys/types.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
29 #include <sys/stat.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
30 #include <fcntl.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
31 #include <string.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
32 #include <errno.h>
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
33
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
34 #include "prepstdreply.h"
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
35 #include "ctrlvalue.h"
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
36 #include "strgen.h"
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
37 #include "chomp.h"
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
38 #include "log_error.h"
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
39 #include "mygetline.h"
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
40 #include "wrappers.h"
245
00eadc106b34 changed to use the new memory wrappers
mortenp
parents: 225
diff changeset
41 #include "memory.h"
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
42 #include "getlistaddr.h"
518
f745db86c61c free() -> myfree()
mmj
parents: 422
diff changeset
43 #include "mlmmj.h"
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
44 #include "getlistdelim.h"
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
45 #include "unistr.h"
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
46
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
47 char *substitute(const char *line, const char *listaddr, const char *listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
48 size_t datacount, char **data, const char *listdir)
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
49 {
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
50 char *s1, *s2;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
51
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
52 s1 = substitute_one(line, listaddr, listdelim, datacount, data,
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
53 listdir);
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
54 while(s1) {
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
55 s2 = substitute_one(s1, listaddr, listdelim, datacount, data,
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
56 listdir);
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
57 if(s2) {
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
58 myfree(s1);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
59 s1 = s2;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
60 } else
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
61 return s1;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
62 }
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
63
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
64 return mystrdup(line);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
65 }
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
66
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
67 char *substitute_one(const char *line, const char *listaddr,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
68 const char *listdelim, size_t datacount, char **data,
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
69 const char *listdir)
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
70 {
363
000cf869301c Further fixups to new prepstdreply. Seems to work now, needs more testing though
mmj
parents: 362
diff changeset
71 char *fqdn, *listname, *d1, *d2, *token, *value = NULL;
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
72 char *retstr, *origline;
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
73 size_t len, i;
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
74
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
75 if(line == NULL)
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
76 return NULL;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
77
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
78 origline = mystrdup(line);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
79
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
80 d1 = strchr(origline, '$');
362
4c1afa9908ab *GRRR* FFS
mmj
parents: 361
diff changeset
81
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
82 if(d1 == NULL) {
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
83 myfree(origline);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
84 return NULL;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
85 } else
362
4c1afa9908ab *GRRR* FFS
mmj
parents: 361
diff changeset
86 d2 = strchr(d1 + 1, '$');
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
87
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
88 if(d1 && d2) {
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
89 len = d2 - d1;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
90 token = mymalloc(len + 1);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
91 snprintf(token, len, "%s", d1 + 1);
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
92 } else {
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
93 myfree(origline);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
94 return NULL;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
95 }
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
96
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
97 *d1 = '\0';
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
98
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
99 fqdn = genlistfqdn(listaddr);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
100 listname = genlistname(listaddr);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
101
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
102 if(strcmp(token, "listaddr") == 0) {
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
103 value = mystrdup(listaddr);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
104 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
105 } else if(strcmp(token, "listowner") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
106 value = concatstr(4, listname, listdelim, "owner@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
107 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
108 } else if(strcmp(token, "helpaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
109 value = concatstr(4, listname, listdelim, "help@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
110 goto concatandreturn;
610
af32f7ed5d3d Added list FAQ feature (Henne Vogelsang)
mortenp
parents: 607
diff changeset
111 } else if(strcmp(token, "faqaddr") == 0) {
af32f7ed5d3d Added list FAQ feature (Henne Vogelsang)
mortenp
parents: 607
diff changeset
112 value = concatstr(4, listname, listdelim, "faq@", fqdn);
af32f7ed5d3d Added list FAQ feature (Henne Vogelsang)
mortenp
parents: 607
diff changeset
113 goto concatandreturn;
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
114 } else if(strcmp(token, "listgetN") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
115 value = concatstr(4, listname, listdelim, "get-N@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
116 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
117 } else if(strcmp(token, "listunsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
118 value = concatstr(4, listname, listdelim, "unsubscribe@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
119 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
120 } else if(strcmp(token, "digestunsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
121 value = concatstr(4, listname, listdelim,
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
122 "unsubscribe-digest@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
123 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
124 } else if(strcmp(token, "nomailunsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
125 value = concatstr(4, listname, listdelim,
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
126 "unsubscribe-nomail@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
127 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
128 } else if(strcmp(token, "listsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
129 value = concatstr(4, listname, listdelim, "subscribe@", fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
130 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
131 } else if(strcmp(token, "digestsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
132 value = concatstr(4, listname, listdelim, "subscribe-digest@",
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
133 fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
134 goto concatandreturn;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
135 } else if(strcmp(token, "nomailsubaddr") == 0) {
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
136 value = concatstr(4, listname, listdelim, "subscribe-nomail@",
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
137 fqdn);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
138 goto concatandreturn;
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
139 } else if(strncmp(token, "control", 7) == 0) {
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
140 value = token + 7;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
141 if(*value == '\0') {
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
142 value = mystrdup("");
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
143 goto concatandreturn;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
144 }
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
145 for(; *value != '\0'; value++) {
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
146 if(*value >= '0' && *value <= '9') continue;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
147 if(*value >= 'A' && *value <= 'Z') continue;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
148 if(*value >= 'a' && *value <= 'z') continue;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
149 break;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
150 }
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
151 if(*value != '\0') {
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
152 value = mystrdup(token + 7);
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
153 goto concatandreturn;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
154 }
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
155 value = token + 7;
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
156 value = ctrlcontent(listdir, value);
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
157 if (value == NULL)
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
158 value = mystrdup("");
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
159 goto concatandreturn;
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
160 }
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
161 if(data) {
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
162 for(i = 0; i < datacount; i++) {
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
163 if(strcmp(token, data[i*2]) == 0) {
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
164 value = mystrdup(data[(i*2)+1]);
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
165 goto concatandreturn;
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
166 }
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
167 }
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
168 }
365
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
169
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
170 myfree(origline);
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
171 return NULL;
24a86824b6b8 Substitute all of them and convert moderation to prepstdreply
mmj
parents: 364
diff changeset
172
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
173 concatandreturn:
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
174 retstr = concatstr(3, origline, value, d2 + 1);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
175 myfree(origline);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
176 myfree(value);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
177 myfree(token);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
178 myfree(fqdn);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
179 myfree(listname);
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
180
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
181 return retstr;
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
182 }
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
183
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
184
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
185 int open_listtext(const char *listdir, const char *filename)
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
186 {
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
187 char *tmp;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
188 int fd;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
189
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
190 tmp = concatstr(3, listdir, "/text/", filename);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
191 fd = open(tmp, O_RDONLY);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
192 myfree(tmp);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
193 if (fd >= 0)
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
194 return fd;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
195
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
196 tmp = concatstr(2, DEFAULTTEXTDIR "/default/", filename);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
197 fd = open(tmp, O_RDONLY);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
198 myfree(tmp);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
199 if (fd >= 0)
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
200 return fd;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
201
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
202 tmp = concatstr(2, DEFAULTTEXTDIR "/en/", filename);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
203 fd = open(tmp, O_RDONLY);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
204 myfree(tmp);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
205 if (fd >= 0)
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
206 return fd;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
207
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
208 log_error(LOG_ARGS, "Could not open listtext '%s'", filename);
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
209 return -1;
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
210 }
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
211
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
212
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
213 char *prepstdreply(const char *listdir, const char *filename, const char *from,
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
214 const char *to, const char *replyto, size_t tokencount,
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
215 char **data, const char *mailname)
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
216 {
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
217 size_t i, len;
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
218 int infd, outfd, mailfd;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
219 char *listaddr, *listdelim, *tmp, *retstr = NULL;
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
220 char *listfqdn, *line, *utfline, *utfsub, *utfsub2;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
221 char *str = NULL;
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
222 char **moredata;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
223 char *headers[10] = { NULL }; /* relies on NULL to flag end */
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
224
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
225 if ((infd = open_listtext(listdir, filename)) < 0) {
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
226 return NULL;
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
227 }
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
228
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
229 listaddr = getlistaddr(listdir);
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
230 listdelim = getlistdelim(listdir);
641
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
231 listfqdn = genlistfqdn(listaddr);
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
232
278
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
233 do {
281
97634188c50c standard replies did not work before
mmj
parents: 278
diff changeset
234 tmp = random_str();
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
235 if (retstr)
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
236 myfree(retstr);
278
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
237 retstr = concatstr(3, listdir, "/queue/", tmp);
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
238 myfree(tmp);
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
239
281
97634188c50c standard replies did not work before
mmj
parents: 278
diff changeset
240 outfd = open(retstr, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
278
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
241
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
242 } while ((outfd < 0) && (errno == EEXIST));
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
243
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
244 if(outfd < 0) {
281
97634188c50c standard replies did not work before
mmj
parents: 278
diff changeset
245 log_error(LOG_ARGS, "Could not open std mail %s", retstr);
641
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
246 myfree(listaddr);
520
734ce7aa42bb 1.2.9-RC1 with recipdelim patch
mmj
parents: 518
diff changeset
247 myfree(listdelim);
641
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
248 myfree(listfqdn);
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
249 myfree(retstr);
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
250 return NULL;
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
251 }
359
ca217febcfbd Rerwrite the way listtexts are handled and move Subject: out into the file
mmj
parents: 281
diff changeset
252
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
253 moredata = mymalloc(2*(tokencount+6) * sizeof(char *));
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
254 for (i=0; i<2*tokencount; i++) {
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
255 moredata[i] = data[i];
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
256 }
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
257 for (i=0; i<6; i++) {
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
258 moredata[2*(tokencount+i)] = mystrdup("randomN");
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
259 moredata[2*(tokencount+i)][6] = '0' + i;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
260 moredata[2*(tokencount+i)+1] = random_str();
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
261 }
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
262 tokencount += 6;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
263
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
264 tmp = substitute(from, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
265 tokencount, moredata, listdir);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
266 headers[0] = concatstr(2, "From: ", tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
267 myfree(tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
268 tmp = substitute(to, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
269 tokencount, moredata, listdir);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
270 headers[1] = concatstr(2, "To: ", tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
271 myfree(tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
272 headers[2] = genmsgid(listfqdn);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
273 chomp(headers[2]);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
274 headers[3] = gendatestr();
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
275 chomp(headers[3]);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
276 headers[4] = mystrdup("Subject: mlmmj administrivia");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
277 headers[5] = mystrdup("MIME-Version: 1.0");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
278 headers[6] = mystrdup("Content-Type: text/plain; charset=utf-8");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
279 headers[7] = mystrdup("Content-Transfer-Encoding: 8bit");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
280
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
281 if(replyto) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
282 tmp = substitute(replyto, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
283 tokencount, moredata, listdir);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
284 headers[8] = concatstr(2, "Reply-To: ", tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
285 myfree(tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
286 }
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
287
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
288 for(;;) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
289 line = mygetline(infd);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
290 if (!line) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
291 log_error(LOG_ARGS, "No body in '%s' listtext",
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
292 filename);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
293 break;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
294 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
295 if (*line == '\n') {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
296 /* end of headers */
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
297 myfree(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
298 line = NULL;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
299 break;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
300 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
301 chomp(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
302 if (*line == ' ' || *line == '\t') {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
303 /* line beginning with linear whitespace is a
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
304 continuation of previous header line */
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
305 utfsub = unistr_escaped_to_utf8(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
306 str = substitute(utfsub, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
307 tokencount, moredata, listdir);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
308 myfree(utfsub);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
309 len = strlen(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
310 str[len] = '\n';
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
311 if(writen(outfd, str, len+1) < 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
312 log_error(LOG_ARGS, "Could not write std mail");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
313 myfree(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
314 myfree(line);
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
315 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
316 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
317 goto freeandreturn;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
318 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
319 myfree(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
320 } else {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
321 tmp = line;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
322 len = 0;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
323 while (*tmp && *tmp != ':') {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
324 tmp++;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
325 len++;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
326 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
327 if (!*tmp) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
328 log_error(LOG_ARGS, "No headers or invalid "
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
329 "header in '%s' listtext",
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
330 filename);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
331 break;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
332 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
333 tmp++;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
334 len++;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
335 /* remove the standard header if one matches */
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
336 for (i=0; headers[i] != NULL; i++) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
337 if (strncasecmp(line, headers[i], len) == 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
338 myfree(headers[i]);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
339 while (headers[i] != NULL) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
340 headers[i] = headers[i+1];
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
341 i++;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
342 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
343 break;
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
344 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
345 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
346 utfsub = unistr_escaped_to_utf8(tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
347 *tmp = '\0';
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
348 utfsub2 = substitute(utfsub, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
349 tokencount, moredata, listdir);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
350 myfree(utfsub);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
351 if (strncasecmp(line, "Subject:", len) == 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
352 tmp = unistr_utf8_to_header(utfsub2);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
353 myfree(utfsub2);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
354 str = concatstr(2, line, tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
355 myfree(tmp);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
356 } else {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
357 str = concatstr(2, line, utfsub2);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
358 myfree(utfsub2);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
359 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
360 len = strlen(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
361 str[len] = '\n';
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
362 if(writen(outfd, str, len+1) < 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
363 log_error(LOG_ARGS, "Could not write std mail");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
364 myfree(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
365 myfree(line);
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
366 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
367 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
368 goto freeandreturn;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
369 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
370 myfree(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
371 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
372 myfree(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
373 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
374
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
375 for (i=0; headers[i] != NULL; i++) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
376 len = strlen(headers[i]);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
377 headers[i][len] = '\n';
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
378 if(writen(outfd, headers[i], len+1) < 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
379 log_error(LOG_ARGS, "Could not write std mail");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
380 if (line)
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
381 myfree(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
382 myfree(str);
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
383 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
384 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
385 goto freeandreturn;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
386 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
387 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
388
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
389 /* end the headers */
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
390 if(writen(outfd, "\n", 1) < 0) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
391 log_error(LOG_ARGS, "Could not write std mail");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
392 myfree(str);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
393 if (line)
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
394 myfree(line);
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
395 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
396 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
397 goto freeandreturn;
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
398 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
399
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
400 if (line) {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
401 str = concatstr(2, line, "\n");
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
402 myfree(line);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
403 } else {
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
404 str = mygetline(infd);
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
405 }
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
406 while(str) {
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
407 utfline = unistr_escaped_to_utf8(str);
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
408 myfree(str);
652
00a1c5697fa6 Added unicode support to listtexts
mortenp
parents: 646
diff changeset
409
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
410 tmp = utfline;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
411 while (*tmp && (*tmp == ' ' || *tmp == '\t')) {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
412 tmp++;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
413 }
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
414 if (strncmp(tmp,"$originalmail",13) == 0) {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
415 *tmp = '\0';
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
416 tmp += 13;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
417 str = tmp;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
418 while (*tmp >= '0' && *tmp <= '9')
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
419 tmp++;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
420 if (*tmp == '$') {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
421 *tmp = '\0';
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
422 len = 100;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
423 if (str != tmp)
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
424 len = atol(str);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
425 if (mailname &&
778
af2d036b7d0c Insignificant change: zero is a valid file descriptor
Ben Schmidt
parents: 754
diff changeset
426 ((mailfd = open(mailname, O_RDONLY)) >= 0)){
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
427 str = NULL;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
428 i = 0;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
429 while (i < len &&
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
430 (str = mygetline(mailfd))) {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
431 tmp = str;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
432 str = concatstr(2,utfline,str);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
433 myfree(tmp);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
434 if(writen(outfd,str,strlen(str)) < 0) {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
435 myfree(str);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
436 myfree(utfline);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
437 log_error(LOG_ARGS, "Could not write std mail");
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
438 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
439 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
440 goto freeandreturn;
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
441 }
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
442 myfree(str);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
443 i++;
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
444 }
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
445 close(mailfd);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
446 } else {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
447 log_error(LOG_ARGS, "Could not substitute $originalmail%d$ (mailname == %s)",len,mailname);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
448 }
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
449 } else {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
450 log_error(LOG_ARGS, "Bad $originalmailNNN$ substitution");
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
451 }
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
452 myfree(utfline);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
453 } else {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
454 str = substitute(utfline, listaddr, listdelim,
754
ecb991e41a4c Add $controlN$ substitution
Ben Schmidt
parents: 745
diff changeset
455 tokencount, moredata, listdir);
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
456 myfree(utfline);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
457 if(writen(outfd, str, strlen(str)) < 0) {
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
458 myfree(str);
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
459 log_error(LOG_ARGS, "Could not write std mail");
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
460 myfree(retstr);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
461 retstr = NULL;
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
462 goto freeandreturn;
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
463 }
278
45501498e5a8 Another EEXIST check and some myfree's added
mmj
parents: 264
diff changeset
464 myfree(str);
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
465 }
742
b00eb39643c1 Changes to how $originalmail$ works
Ben Schmidt
parents: 741
diff changeset
466
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
467 str = mygetline(infd);
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
468 }
741
b72bcb7e08a2 Arbitrary headers in listtexts, fix default Content-Transfer-Encoding: header,
Ben Schmidt
parents: 716
diff changeset
469
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
470 fsync(outfd);
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
471 close(outfd);
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
472
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
473 freeandreturn:
641
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
474 myfree(listaddr);
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
475 myfree(listdelim);
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
476 myfree(listfqdn);
436eea81bc20 Changed Message-ID headers to include FQDN (Ansgar Burchardt)
mortenp
parents: 610
diff changeset
477
745
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
478 for (i=tokencount-6; i<tokencount; i++) {
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
479 myfree(moredata[2*i]);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
480 myfree(moredata[2*i+1]);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
481 }
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
482 myfree(moredata);
5edfa9eef6c7 Add $random0$ through $random5$ substitutions
Ben Schmidt
parents: 742
diff changeset
483
189
cb46caab2621 New function to prepare a standard mail in an easy way, and make send_help
mmj
parents:
diff changeset
484 return retstr;
245
00eadc106b34 changed to use the new memory wrappers
mortenp
parents: 225
diff changeset
485 }