Line 0
Link Here
|
|
|
1 |
--- ctm_smail/ctm_smail.c.ORI 2023-04-25 21:04:20.000000000 +0200 |
2 |
+++ ctm_smail/ctm_smail.c 2019-07-29 03:53:20.090358000 +0200 |
3 |
@@ -32,18 +32,18 @@ |
4 |
#define LINE_LENGTH 72 /* Chars per encoded line. Divisible by 4. */ |
5 |
|
6 |
int chop_and_send_or_queue(FILE *dfp, char *delta, off_t ctm_size, |
7 |
- long max_msg_size, char *mail_alias, char *queue_dir); |
8 |
+ long max_msg_size, char *mail_alias, char *owner_alias, char *queue_dir); |
9 |
int chop_and_send(FILE *dfp, char *delta, long msg_size, int npieces, |
10 |
- char *mail_alias); |
11 |
+ char *mail_alias, char *owner_alias); |
12 |
int chop_and_queue(FILE *dfp, char *delta, long msg_size, int npieces, |
13 |
- char *mail_alias, char *queue_dir); |
14 |
+ char *mail_alias, char *owner_alias, char *queue_dir); |
15 |
void clean_up_queue(char *queue_dir); |
16 |
int encode_body(FILE *sm_fp, FILE *delta_fp, long msg_size, unsigned *sum); |
17 |
-void write_header(FILE *sfp, char *mail_alias, char *delta, int pce, |
18 |
+void write_header(FILE *sfp, char *mail_alias, char *owner_alias, char *delta, int pce, |
19 |
int npieces); |
20 |
void write_trailer(FILE *sfp, unsigned sum); |
21 |
int apologise(char *delta, off_t ctm_size, long max_ctm_size, |
22 |
- char *mail_alias, char *queue_dir); |
23 |
+ char *mail_alias, char *owner_alias, char *queue_dir); |
24 |
FILE *open_sendmail(void); |
25 |
int close_sendmail(FILE *fp); |
26 |
|
27 |
@@ -53,6 +53,7 @@ |
28 |
int status = 0; |
29 |
char *delta_file; |
30 |
char *mail_alias; |
31 |
+ char *owner_alias = NULL; |
32 |
long max_msg_size = DEF_MAX_MSG; |
33 |
long max_ctm_size = 0; |
34 |
char *log_file = NULL; |
35 |
@@ -63,11 +64,12 @@ |
36 |
|
37 |
err_prog_name(argv[0]); |
38 |
|
39 |
- OPTIONS("[-l log] [-m maxmsgsize] [-c maxctmsize] [-q queuedir] ctm-delta mail-alias") |
40 |
+ OPTIONS("[-l log] [-m maxmsgsize] [-c maxctmsize] [-q queuedir] [-o owner_alias] ctm-delta mail-alias") |
41 |
NUMBER('m', max_msg_size) |
42 |
NUMBER('c', max_ctm_size) |
43 |
STRING('l', log_file) |
44 |
STRING('q', queue_dir) |
45 |
+ STRING('o', owner_alias) |
46 |
ENDOPTS |
47 |
|
48 |
if (argc != 3) |
49 |
@@ -91,11 +93,11 @@ |
50 |
} |
51 |
|
52 |
if (max_ctm_size != 0 && sb.st_size > max_ctm_size) |
53 |
- status = apologise(delta, sb.st_size, max_ctm_size, mail_alias, |
54 |
+ status = apologise(delta, sb.st_size, max_ctm_size, mail_alias, owner_alias, |
55 |
queue_dir); |
56 |
else |
57 |
status = chop_and_send_or_queue(dfp, delta, sb.st_size, max_msg_size, |
58 |
- mail_alias, queue_dir); |
59 |
+ mail_alias, owner_alias, queue_dir); |
60 |
|
61 |
fclose(dfp); |
62 |
|
63 |
@@ -109,7 +111,7 @@ |
64 |
*/ |
65 |
int |
66 |
chop_and_send_or_queue(FILE *dfp, char *delta, off_t ctm_size, |
67 |
- long max_msg_size, char *mail_alias, char *queue_dir) |
68 |
+ long max_msg_size, char *mail_alias, char *owner_alias, char *queue_dir) |
69 |
{ |
70 |
int npieces; |
71 |
long msg_size; |
72 |
@@ -133,10 +135,10 @@ |
73 |
#undef howmany |
74 |
|
75 |
if (queue_dir == NULL) |
76 |
- status = chop_and_send(dfp, delta, msg_size, npieces, mail_alias); |
77 |
+ status = chop_and_send(dfp, delta, msg_size, npieces, mail_alias, owner_alias); |
78 |
else |
79 |
{ |
80 |
- status = chop_and_queue(dfp, delta, msg_size, npieces, mail_alias, |
81 |
+ status = chop_and_queue(dfp, delta, msg_size, npieces, mail_alias, owner_alias, |
82 |
queue_dir); |
83 |
if (status) |
84 |
clean_up_queue(queue_dir); |
85 |
@@ -152,7 +154,7 @@ |
86 |
*/ |
87 |
int |
88 |
chop_and_send(FILE *dfp, char *delta, long msg_size, int npieces, |
89 |
- char *mail_alias) |
90 |
+ char *mail_alias, char *owner_alias) |
91 |
{ |
92 |
int pce; |
93 |
FILE *sfp; |
94 |
@@ -171,7 +173,7 @@ |
95 |
if ((sfp = open_sendmail()) == NULL) |
96 |
return 1; |
97 |
|
98 |
- write_header(sfp, mail_alias, delta, pce, npieces); |
99 |
+ write_header(sfp, mail_alias, owner_alias, delta, pce, npieces); |
100 |
read_error = encode_body(sfp, dfp, msg_size, &sum); |
101 |
if (!read_error) |
102 |
write_trailer(sfp, sum); |
103 |
@@ -204,7 +206,7 @@ |
104 |
*/ |
105 |
int |
106 |
chop_and_queue(FILE *dfp, char *delta, long msg_size, int npieces, |
107 |
- char *mail_alias, char *queue_dir) |
108 |
+ char *mail_alias, char *owner_alias, char *queue_dir) |
109 |
{ |
110 |
int pce; |
111 |
FILE *qfp; |
112 |
@@ -228,7 +230,7 @@ |
113 |
return 1; |
114 |
} |
115 |
|
116 |
- write_header(qfp, mail_alias, delta, pce, npieces); |
117 |
+ write_header(qfp, mail_alias, owner_alias, delta, pce, npieces); |
118 |
if (encode_body(qfp, dfp, msg_size, &sum)) |
119 |
return 1; |
120 |
write_trailer(qfp, sum); |
121 |
@@ -381,9 +383,12 @@ |
122 |
* Write the mail header and data header. |
123 |
*/ |
124 |
void |
125 |
-write_header(FILE *sfp, char *mail_alias, char *delta, int pce, int npieces) |
126 |
+write_header(FILE *sfp, char *mail_alias, char *owner_alias, char *delta, int pce, int npieces) |
127 |
{ |
128 |
- fprintf(sfp, "From: owner-%s\n", mail_alias); |
129 |
+ if (owner_alias == NULL) |
130 |
+ fprintf(sfp, "From: owner-%s\n", mail_alias); |
131 |
+ else |
132 |
+ fprintf(sfp, "From: %s\n", owner_alias); |
133 |
fprintf(sfp, "To: %s\n", mail_alias); |
134 |
fprintf(sfp, "Subject: ctm-mail %s %d/%d\n\n", delta, pce, npieces); |
135 |
|
136 |
@@ -406,7 +411,7 @@ |
137 |
* Returns 0 on success, 1 on failure. |
138 |
*/ |
139 |
int |
140 |
-apologise(char *delta, off_t ctm_size, long max_ctm_size, char *mail_alias, |
141 |
+apologise(char *delta, off_t ctm_size, long max_ctm_size, char *mail_alias, char *owner_alias, |
142 |
char *queue_dir) |
143 |
{ |
144 |
FILE *sfp; |
145 |
@@ -430,7 +435,10 @@ |
146 |
} |
147 |
|
148 |
|
149 |
- fprintf(sfp, "From: owner-%s\n", mail_alias); |
150 |
+ if (owner_alias == NULL) |
151 |
+ fprintf(sfp, "From: owner-%s\n", mail_alias); |
152 |
+ else |
153 |
+ fprintf(sfp, "From: %s\n", owner_alias); |
154 |
fprintf(sfp, "To: %s\n", mail_alias); |
155 |
fprintf(sfp, "Subject: ctm-notice %s\n\n", delta); |
156 |
|