summaryrefslogtreecommitdiff
path: root/sys/src/cmd/upas/send/cat_mail.c
blob: 5b901631f9c383941e895a45d87d89d7cdc29bfb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "common.h"
#include "send.h"

/* dispose of local addresses */
int
cat_mail(dest *dp, message *mp)
{
	char *rcvr, *cp, *s;
	String *ss;
	Biobuf *b;
	int e;

	ss = unescapespecial(s_clone(dp->repl1));
	s = s_to_c(ss);
	if (flagn) {
		if(!flagx)
			print("upas/mbappend %s\n", s);
		else
			print("%s\n", s_to_c(dp->addr));
		s_free(ss);
		return 0;
	}
	/* avoid lock errors */
	if(strcmp(s, "/dev/null") == 0){
		s_free(ss);
		return(0);
	}
	b = openfolder(s, time(0));
	s_free(ss);
	if(b == nil)
		return refuse(dp, mp, "mail file cannot be created", 0, 0);
	e = m_print(mp, b, 0, 1) == -1 || Bprint(b, "\n") == -1;
	e |= closefolder(b);
	if(e != 0)
		return refuse(dp, mp, "error writing mail file", 0, 0);
	rcvr = s_to_c(dp->addr);
	if(cp = strrchr(rcvr, '!'))
		rcvr = cp+1;
	logdelivery(dp, rcvr, mp);
	return 0;
}