123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include "common.h"
- #include "send.h"
- /* dispose of local addresses */
- int
- cat_mail(dest *dp, message *mp)
- {
- Biobuf *fp;
- char *rcvr, *cp;
- Mlock *l;
- String *tmp, *s;
- int i, n;
- s = unescapespecial(s_clone(dp->repl1));
- if (nflg) {
- if(!xflg)
- print("cat >> %s\n", s_to_c(s));
- else
- print("%s\n", s_to_c(dp->addr));
- s_free(s);
- return 0;
- }
- for(i = 0;; i++){
- l = syslock(s_to_c(s));
- if(l == 0)
- return refuse(dp, mp, "can't lock mail file", 0, 0);
- fp = sysopen(s_to_c(s), "al", MBOXMODE);
- if(fp)
- break;
- tmp = s_append(0, s_to_c(s));
- s_append(tmp, ".tmp");
- fp = sysopen(s_to_c(tmp), "al", MBOXMODE);
- if(fp){
- syslog(0, "mail", "error: used %s", s_to_c(tmp));
- s_free(tmp);
- break;
- }
- s_free(tmp);
- sysunlock(l);
- if(i >= 5)
- return refuse(dp, mp, "mail file cannot be opened", 0, 0);
- sleep(1000);
- }
- s_free(s);
- n = m_print(mp, fp, (char *)0, 1);
- if (Bprint(fp, "\n") < 0 || Bflush(fp) < 0 || n < 0){
- sysclose(fp);
- sysunlock(l);
- return refuse(dp, mp, "error writing mail file", 0, 0);
- }
- sysclose(fp);
- sysunlock(l);
- rcvr = s_to_c(dp->addr);
- if(cp = strrchr(rcvr, '!'))
- rcvr = cp+1;
- logdelivery(dp, rcvr, mp);
- return 0;
- }
|