Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 22331 | Differences between
and this patch

Collapse All | Expand All

(-)dbmail-2.0.4.org/pipe.c (-13 / +11 lines)
Lines 553-564 Link Here
553
	}
553
	}
554
554
555
	/* Loop through the users list. */
555
	/* Loop through the users list. */
556
	for (element = list_getstart(dsnusers); element != NULL;
556
	for (element = list_getstart(dsnusers); element != NULL; element = element->nextnode) {
557
	     element = element->nextnode) {
558
		struct element *userid_elem;
557
		struct element *userid_elem;
559
		int has_2 = 0, has_4 = 0, has_5 = 0, has_5_2 = 0;
558
		int has_2 = 0, has_4 = 0, has_5 = 0, has_5_2 = 0;
560
		deliver_to_user_t *delivery =
559
		deliver_to_user_t *delivery = (deliver_to_user_t *) element->data;
561
		    (deliver_to_user_t *) element->data;
560
		dsn_class_t dsn_result;
562
561
563
		/* If there was already an error during resolving,
562
		/* If there was already an error during resolving,
564
		 * let's skip this delivery. */
563
		 * let's skip this delivery. */
Lines 571-607 Link Here
571
		     userid_elem != NULL;
570
		     userid_elem != NULL;
572
		     userid_elem = userid_elem->nextnode) {
571
		     userid_elem = userid_elem->nextnode) {
573
			u64_t useridnr = *(u64_t *) userid_elem->data;
572
			u64_t useridnr = *(u64_t *) userid_elem->data;
573
			
574
			trace(TRACE_DEBUG,
574
			trace(TRACE_DEBUG,
575
			      "%s, %s: calling sort_and_deliver for useridnr [%llu]",
575
			      "%s, %s: calling sort_and_deliver for useridnr [%llu]",
576
			      __FILE__, __func__, useridnr);
576
			      __FILE__, __func__, useridnr);
577
577
578
			switch (sort_and_deliver(tmpmsgidnr,
578
			dsn_result = sort_and_deliver(tmpmsgidnr, msgsize, useridnr, delivery->mailbox);
579
						 header, headersize,
579
580
						 msgsize, rfcsize,
580
			switch (dsn_result) {
581
						 useridnr,
581
			case DSN_CLASS_OK:
582
						 delivery->mailbox)) {
583
			case SORT_SUCCESS:
584
				/* Indicate success. */
582
				/* Indicate success. */
585
				trace(TRACE_DEBUG,
583
				trace(TRACE_DEBUG,
586
				      "%s, %s: successful sort_and_deliver for useridnr [%llu]",
584
				      "%s, %s: successful sort_and_deliver for useridnr [%llu]",
587
				      __FILE__, __func__, useridnr);
585
				      __FILE__, __func__, useridnr);
588
				has_2 = 1;
586
				has_2 = 1;
589
				break;
587
				break;
590
			case SORT_FAILURE:
588
			case DSN_CLASS_FAIL:
591
				/* Indicate permanent failure. */
589
				/* Indicate permanent failure. */
592
				trace(TRACE_ERROR,
590
				trace(TRACE_ERROR,
593
				      "%s, %s: permanent failure sort_and_deliver for useridnr [%llu]",
591
				      "%s, %s: permanent failure sort_and_deliver for useridnr [%llu]",
594
				      __FILE__, __func__, useridnr);
592
				      __FILE__, __func__, useridnr);
595
				has_5 = 1;
593
				has_5 = 1;
596
				break;
594
				break;
597
			case SORT_OVER_QUOTA:
595
			case DSN_CLASS_QUOTA:
598
				/* Indicate over quota. */
596
				/* Indicate over quota. */
599
				trace(TRACE_ERROR,
597
				trace(TRACE_ERROR,
600
				      "%s, %s: temporary failure sort_and_deliver for useridnr [%llu]",
598
				      "%s, %s: temporary failure sort_and_deliver for useridnr [%llu]",
601
				      __FILE__, __func__, useridnr);
599
				      __FILE__, __func__, useridnr);
602
				has_5_2 = 1;
600
				has_5_2 = 1;
603
				break;
601
				break;
604
			case SORT_WEIRD_ERROR:
602
			case DSN_CLASS_TEMP:
605
			default:
603
			default:
606
				/* Assume a temporary failure */
604
				/* Assume a temporary failure */
607
				trace(TRACE_ERROR,
605
				trace(TRACE_ERROR,
(-)dbmail-2.0.4.org/sort/sort.c (-28 / +7 lines)
Lines 46-106 Link Here
46
#include <unistd.h>
46
#include <unistd.h>
47
#include "dbmd5.h"
47
#include "dbmd5.h"
48
#include "misc.h"
48
#include "misc.h"
49
#include "dsn.h"
49
50
50
#ifdef SIEVE
51
#ifdef SIEVE
51
#include "sortsieve.h"
52
#include "sortsieve.h"
52
#endif
53
#endif
53
54
54
/* Run the user's sorting rules on this message
55
dsn_class_t sort_and_deliver(u64_t msgidnr, u64_t msgsize, u64_t useridnr, const char *mailbox)
55
 * Retrieve the action list as either
56
 * a linked list of things to do, or a 
57
 * single thing to do. Not sure yet...
58
 *
59
 * Then do it!
60
 * */
61
dsn_class_t sort_and_deliver(u64_t msgidnr,
62
		const char *header UNUSED, 
63
		u64_t headersize UNUSED, 
64
		u64_t totalmsgsize, 
65
		u64_t totalrfcsize UNUSED, 
66
		u64_t useridnr UNUSED, 
67
		const char *mailbox)
68
{
56
{
69
	u64_t mboxidnr, newmsgidnr;
57
	u64_t mboxidnr, newmsgidnr;
70
58
71
	if (mailbox == NULL)
59
	if (mailbox == NULL)
72
		mailbox = "INBOX";
60
		mailbox = "INBOX";
73
61
74
	/* There used to be code that handled the result
75
	 * actions of a Sieve script. Since it wasn't being
76
	 * used as of DBMail 2.0.3, I pulled it out.
77
	 * Aaron Stone, 21 Jan 2005. */
78
79
	/* Did we fail to create the mailbox? */
80
	if (db_find_create_mailbox(mailbox, useridnr, &mboxidnr) != 0) {
62
	if (db_find_create_mailbox(mailbox, useridnr, &mboxidnr) != 0) {
81
		/* Serious failure situation! */
82
		trace(TRACE_ERROR, "sort_and_deliver(): INBOX not found and could not be created.");
63
		trace(TRACE_ERROR, "sort_and_deliver(): INBOX not found and could not be created.");
83
		return SORT_FAILURE;
64
		return DSN_CLASS_FAIL;
84
	} else {
65
	} else {
85
		switch (db_copymsg(msgidnr, mboxidnr, useridnr, &newmsgidnr)) {
66
		switch (db_copymsg(msgidnr, mboxidnr, useridnr, &newmsgidnr)) {
86
		case -2:
67
		case -2:
87
			/* Couldn't deliver because the quotum is exceeded. */
88
			trace(TRACE_MESSAGE, "%s, %s: error copying message to user [%llu],"
68
			trace(TRACE_MESSAGE, "%s, %s: error copying message to user [%llu],"
89
					"maxmail exceeded", 
69
					"maxmail exceeded", 
90
					__FILE__, __func__, 
70
					__FILE__, __func__, 
91
					useridnr);
71
					useridnr);
92
			return SORT_OVER_QUOTA;
72
			return DSN_CLASS_QUOTA;
93
		case -1:
73
		case -1:
94
			/* Couldn't deliver because something something went wrong. */
95
			trace(TRACE_ERROR, "%s, %s: error copying message to user [%llu]", 
74
			trace(TRACE_ERROR, "%s, %s: error copying message to user [%llu]", 
96
					__FILE__, __func__, 
75
					__FILE__, __func__, 
97
					useridnr);
76
					useridnr);
98
			return SORT_WEIRD_ERROR;
77
			return DSN_CLASS_TEMP;
99
		default:
78
		default:
100
			trace(TRACE_MESSAGE, "%s, %s: message id=%llu, size=%llu is inserted", 
79
			trace(TRACE_MESSAGE, "%s, %s: message id=%llu, size=%llu is inserted", 
101
					__FILE__, __func__, 
80
					__FILE__, __func__, 
102
					newmsgidnr, totalmsgsize);
81
					newmsgidnr, msgsize);
103
			return SORT_SUCCESS;
82
			return DSN_CLASS_OK;
104
		}
83
		}
105
	}
84
	}
106
}
85
}
(-)dbmail-2.0.4.org/sort.h (-11 / +1 lines)
Lines 46-61 Link Here
46
	char *message;
46
	char *message;
47
} sort_action_t;
47
} sort_action_t;
48
48
49
typedef enum {
49
dsn_class_t sort_and_deliver(u64_t msgidnr, u64_t msgsize, u64_t useridnr, const char *mailbox);
50
	SORT_SUCCESS = 0,
51
	SORT_OVER_QUOTA,
52
	SORT_WEIRD_ERROR,
53
	SORT_FAILURE
54
} sort_result_t;
55
56
sort_result_t sort_and_deliver(u64_t msgidnr,
57
			     const char *header, u64_t headersize,
58
			     u64_t msgsize, u64_t rfcsize,
59
			     u64_t useridnr, const char *mailbox);
60
50
61
#endif				/* #ifndef _SORTING_H */
51
#endif				/* #ifndef _SORTING_H */

Return to bug 22331