size_t headers_len = 0;
int len = 0;
- if (userdata == NULL)
+ if (u == NULL)
{
- CtdlLogPrintf(CTDL_EMERG, "Cant process Message <%ld>without Userdata!\n", msgnum);
+ CtdlLogPrintf(CTDL_EMERG, "Can't process message <%ld> without userdata!\n", msgnum);
return;
}
CC->redirect_len = 0;
CC->redirect_alloc = 0;
+ if (u == NULL)
+ {
+ CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red! aaaaaaaaghhh!!!!\n");
+ abort();
+ }
+
/*
* libSieve clobbers the stack if it encounters badly formed
* headers. Sanitize our headers by stripping nonprintable
CtdlFreeMessage(msg);
+ if (u == NULL)
+ {
+ CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red! aaaaaaaaghhh!!!!\n");
+ abort();
+ }
+
+
+ CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n%s\n", my.rfc822headers);
+
sieve2_setvalue_string(sieve2_context, "allheaders", my.rfc822headers);
+ if (u == NULL)
+ {
+ CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red! aaaaaaaaghhh!!!!\n");
+ abort();
+ }
+
CtdlLogPrintf(CTDL_DEBUG, "Calling sieve2_execute()\n");
res = sieve2_execute(sieve2_context, &my);
if (res != SIEVE2_OK) {
CtdlLogPrintf(CTDL_CRIT, "sieve2_execute() returned %d: %s\n", res, sieve2_errstr(res));
}
+ if (u == NULL)
+ {
+ CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red! aaaaaaaaghhh!!!!\n");
+ abort();
+ }
+
free(my.rfc822headers);
my.rfc822headers = NULL;
CtdlDeleteMessages(CC->room.QRname, &msgnum, 1, "");
}
+ if (u == NULL)
+ {
+ CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red! aaaaaaaaghhh!!!!\n");
+ abort();
+ }
+
CtdlLogPrintf(CTDL_DEBUG, "Completed sieve processing on msg <%ld>\n", msgnum);
u->lastproc = msgnum;
else if (i == 'Y') {
if ((flags & QP_EADDR) != 0)
mptr = qp_encode_email_addrs(mptr);
- fold_cprintf("CC: %s%s", mptr, nl);
+ cprintf("CC: %s%s", mptr, nl);
}
else if (i == 'P') {
cprintf("Return-Path: %s%s", mptr, nl);
{
if (haschar(mptr, '@') == 0)
{
- fold_cprintf("To: %s@%s%s", mptr, config.c_fqdn, nl);
+ cprintf("To: %s@%s", mptr, config.c_fqdn);
+ cprintf("%s", nl);
}
else
{
if ((flags & QP_EADDR) != 0)
mptr = qp_encode_email_addrs(mptr);
- fold_cprintf("To: %s%s", mptr, nl);
+ cprintf("To: %s", mptr);
+ cprintf("%s", nl);
}
}
else if (i == 'T') {
}
-/*
- * fold_cprintf() Like cprintf() except it can do RFC2822-style header folding.
- */
-void fold_cprintf(const char *format, ...) {
- va_list arg_ptr;
- char buf[4096];
- int len;
- char *bbuf;
- char *ptr;
-
- va_start(arg_ptr, format);
- if (vsnprintf(buf, sizeof buf, format, arg_ptr) == -1)
- buf[sizeof buf - 2] = '\n';
- va_end(arg_ptr);
-
- len = strlen(buf);
- bbuf = buf;
-
- while (len > 998) {
- ptr = strchr(&bbuf[900], ',');
- if (ptr == NULL) {
- ptr = bbuf+990;
- }
- if ((ptr - bbuf) > 990) {
- ptr = bbuf+990;
- }
- ++ptr;
- client_write(bbuf, ptr-bbuf);
- client_write("\r\n\t", 3);
- len -= (ptr-bbuf);
- bbuf = ptr++;
- }
-
- client_write(bbuf, len);
-}
-
-
/*
* Read data from the client socket.
* Return values are:
#ifdef __GNUC__
void cprintf (const char *format, ...) __attribute__((__format__(__printf__,1,2)));
-void fold_cprintf (const char *format, ...) __attribute__((__format__(__printf__,1,2)));
#else
void cprintf (const char *format, ...);
-void fold_cprintf (const char *format, ...);
#endif
void CtdlLogPrintf(enum LogLevel loglevel, const char *format, ...);