log.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "common.h"
  2. #include "send.h"
  3. /* configuration */
  4. #define LOGBiobuf "log/status"
  5. /* log mail delivery */
  6. extern void
  7. logdelivery(dest *list, char *rcvr, message *mp)
  8. {
  9. dest *parent;
  10. String *srcvr, *sender;
  11. srcvr = unescapespecial(s_copy(rcvr));
  12. sender = unescapespecial(s_clone(mp->sender));
  13. for(parent=list; parent->parent!=0; parent=parent->parent)
  14. ;
  15. if(parent!=list && strcmp(s_to_c(parent->addr), s_to_c(srcvr))!=0)
  16. syslog(0, "mail", "delivered %s From %.256s %.256s (%.256s) %d",
  17. rcvr,
  18. s_to_c(sender), s_to_c(mp->date),
  19. s_to_c(parent->addr), mp->size);
  20. else
  21. syslog(0, "mail", "delivered %s From %.256s %.256s %d", s_to_c(srcvr),
  22. s_to_c(sender), s_to_c(mp->date), mp->size);
  23. s_free(srcvr);
  24. s_free(sender);
  25. }
  26. /* log mail forwarding */
  27. extern void
  28. loglist(dest *list, message *mp, char *tag)
  29. {
  30. dest *next;
  31. dest *parent;
  32. String *srcvr, *sender;
  33. sender = unescapespecial(s_clone(mp->sender));
  34. for(next=d_rm(&list); next != 0; next = d_rm(&list)) {
  35. for(parent=next; parent->parent!=0; parent=parent->parent)
  36. ;
  37. srcvr = unescapespecial(s_clone(next->addr));
  38. if(parent!=next)
  39. syslog(0, "mail", "%s %.256s From %.256s %.256s (%.256s) %d",
  40. tag,
  41. s_to_c(srcvr), s_to_c(sender),
  42. s_to_c(mp->date), s_to_c(parent->addr), mp->size);
  43. else
  44. syslog(0, "mail", "%s %.256s From %.256s %.256s %d", tag,
  45. s_to_c(srcvr), s_to_c(sender),
  46. s_to_c(mp->date), mp->size);
  47. s_free(srcvr);
  48. }
  49. s_free(sender);
  50. }
  51. /* log a mail refusal */
  52. extern void
  53. logrefusal(dest *dp, message *mp, char *msg)
  54. {
  55. char buf[2048];
  56. char *cp, *ep;
  57. String *sender, *srcvr;
  58. srcvr = unescapespecial(s_clone(dp->addr));
  59. sender = unescapespecial(s_clone(mp->sender));
  60. sprint(buf, "error %.256s From %.256s %.256s\nerror+ ", s_to_c(srcvr),
  61. s_to_c(sender), s_to_c(mp->date));
  62. s_free(srcvr);
  63. s_free(sender);
  64. cp = buf + strlen(buf);
  65. ep = buf + sizeof(buf) - sizeof("error + ");
  66. while(*msg && cp<ep) {
  67. *cp++ = *msg;
  68. if (*msg++ == '\n') {
  69. strcpy(cp, "error+ ");
  70. cp += sizeof("error+ ") - 1;
  71. }
  72. }
  73. *cp = 0;
  74. syslog(0, "mail", "%s", buf);
  75. }