32 #define SWAP_PTR(a,b) do { void *c = a; a = b; b = c;} while (0) 60 #if _FFR_CLEAN_MSG_BUF 69 if (priv->
fname != NULL)
81 snprintf(fname,
sizeof (fname),
"%s/%s.%s.%04X", p, server,
85 snprintf(fname,
sizeof (fname),
"%s/%s.%04X", p,
CONNID_STR(priv->
id),
89 fd = open(fname, O_WRONLY | O_APPEND | O_CREAT, 0640);
97 if (fchmod(fd, S_IRUSR | S_IWUSR) != 0)
103 if ((priv->
fname = strdup(fname)) == NULL)
115 #ifdef _POSIX_PTHREAD_SEMANTICS 118 ctime_r(&tid, t,
sizeof (t));
122 strlcpy(t, ctime(&tid,
sizeof (t));
128 if ((p =
strchr(t,
'\r')) != NULL)
130 if ((p =
strchr(t,
'\n')) != NULL)
134 snprintf(s,
sizeof (s) - 3,
"From %s %s", priv->
env_from, t);
136 snprintf(s,
sizeof (s) - 3,
"From %s %s",
"<unknown>", t);
139 if (write(priv->
fd, s, strlen(s)) != strlen(s))
145 char *mac_srv_name = NULL;
146 char *mac_cl_addr = NULL;
147 char *mac_cl_ptr = NULL;
148 char *mac_cl_name = NULL;
149 char *mac_qid = NULL;
154 mac_cl_addr =
STREMPTY(mac_cl_addr,
"null");
156 mac_cl_ptr =
STREMPTY(mac_cl_ptr,
"null");
158 mac_cl_name =
STREMPTY(mac_cl_name,
"null");
160 mac_qid =
STREMPTY(mac_qid,
"null");
167 snprintf(rbuf,
sizeof (rbuf),
168 "Received: from %s (%s [%s])%s\tby %s with SMTP id %s%s",
170 mac_cl_name, mac_cl_addr, rc, mac_srv_name, mac_qid, rc);
172 if (write(priv->
fd, rbuf, strlen(rbuf)) != strlen(rbuf))
175 snprintf(rbuf,
sizeof (rbuf),
176 "X-ze-filter-Envelope: %s from %s/%s/%s/%s/%s%s",
178 mac_cl_name, mac_cl_ptr, mac_cl_addr,
188 if (write(priv->
fd, rbuf, strlen(rbuf)) != strlen(rbuf))
189 ZE_LogSysError(
"can't write fake X-ze-filter-Envelope: line to %s",
209 if (write(priv->
fd, buf, size) != size) {
229 if (close(priv->
fd) < 0) {
248 char *filename = NULL;
254 if (priv->
fname == NULL)
263 sz = strlen(priv->
fname) + strlen(suffix) + 4;
265 filename = (
char *) malloc(sz);
266 if (filename != NULL) {
267 snprintf(filename, sz,
"%s%s", priv->
fname, suffix);
268 if (rename(priv->
fname, filename) == 0)
bool spool_file_write(CTXPRIV_T *, char *, size_t)
bool spool_file_forget(CTXPRIV_T *)
#define CONNID_INT(connid)
bool spool_file_is_open(CTXPRIV_T *priv)
bool spool_file_close(CTXPRIV_T *)
#define CF_QUARANTINE_ADD_FROM_LINE
#define ZE_MessageInfo(level,...)
#define ZE_LogSysError(...)
char * cf_get_str(int id)
#define ZE_LogMsgWarning(level,...)
#define CONNID_STR(connid)
char * sm_macro_get_str(sm_mac_T *, char *)
bool spool_file_create(CTXPRIV_T *)