/* $Id: sort.c 1690 2005-03-18 12:48:34Z paul $
Copyright (C) 2004 Aaron Stone aaron at serendipity dot cx
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Functions for running user defined sorting rules
* on a message in the temporary store, usually
* just delivering the message to the user's INBOX
* ...unless they have fancy rules defined, that is :-)
* */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <time.h>
#include <ctype.h>
#include "db.h"
#include "auth.h"
#include "debug.h"
#include "list.h"
#include "pipe.h"
#include "forward.h"
#include "sort.h"
#include "dbmail.h"
#include "debug.h"
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include "dbmd5.h"
#include "misc.h"
#include "dsn.h"
#ifdef SIEVE
#include "sortsieve.h"
#endif
dsn_class_t sort_and_deliver(u64_t msgidnr, u64_t msgsize, u64_t useridnr, const char *mailbox)
{
u64_t mboxidnr, newmsgidnr;
if (mailbox == NULL)
mailbox = "INBOX";
if (db_find_create_mailbox(mailbox, useridnr, &mboxidnr) != 0) {
trace(TRACE_ERROR, "sort_and_deliver(): INBOX not found and could not be created.");
return DSN_CLASS_FAIL;
} else {
switch (db_copymsg(msgidnr, mboxidnr, useridnr, &newmsgidnr)) {
case -2:
trace(TRACE_MESSAGE, "%s, %s: error copying message to user [%llu],"
"maxmail exceeded",
__FILE__, __func__,
useridnr);
return DSN_CLASS_QUOTA;
case -1:
trace(TRACE_ERROR, "%s, %s: error copying message to user [%llu]",
__FILE__, __func__,
useridnr);
return DSN_CLASS_TEMP;
default:
trace(TRACE_MESSAGE, "%s, %s: message id=%llu, size=%llu is inserted",
__FILE__, __func__,
newmsgidnr, msgsize);
return DSN_CLASS_OK;
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1