dovecot-2.2: pop3: Added pop3_delete_type setting with values "d...

dovecot at dovecot.org dovecot at dovecot.org
Wed Aug 12 09:52:50 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/4fcf4d745a27
changeset: 18931:4fcf4d745a27
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Aug 12 12:52:06 2015 +0300
description:
pop3: Added pop3_delete_type setting with values "default", "expunge" or "flag".
This is related to pop3_deleted_flag setting. The main behefit here is that
you can now hide messages from POP3 by setting pop3_deleted_flag, but
without changing the actual deletion behavior by setting
pop3_delete_type=expunge.

diffstat:

 src/pop3/pop3-commands.c |  11 ++++++++---
 src/pop3/pop3-settings.c |  22 +++++++++++++++++++++-
 src/pop3/pop3-settings.h |   6 ++++++
 3 files changed, 35 insertions(+), 4 deletions(-)

diffs (93 lines):

diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-commands.c
--- a/src/pop3/pop3-commands.c	Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-commands.c	Wed Aug 12 12:52:06 2015 +0300
@@ -219,10 +219,15 @@
 
 static void client_expunge(struct client *client, struct mail *mail)
 {
-	if (client->deleted_kw != NULL)
+	switch (client->set->parsed_delete_type) {
+	case POP3_DELETE_TYPE_EXPUNGE:
+		mail_expunge(mail);
+		break;
+	case POP3_DELETE_TYPE_FLAG:
+		i_assert(client->deleted_kw != NULL);
 		mail_update_keywords(mail, MODIFY_ADD, client->deleted_kw);
-	else
-		mail_expunge(mail);
+		break;
+	}
 	client->expunged_count++;
 }
 
diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-settings.c
--- a/src/pop3/pop3-settings.c	Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-settings.c	Wed Aug 12 12:52:06 2015 +0300
@@ -72,6 +72,7 @@
 	DEF(SET_STR, pop3_logout_format),
 	DEF(SET_ENUM, pop3_uidl_duplicates),
 	DEF(SET_STR, pop3_deleted_flag),
+	DEF(SET_ENUM, pop3_delete_type),
 
 	SETTING_DEFINE_LIST_END
 };
@@ -88,7 +89,8 @@
 	.pop3_client_workarounds = "",
 	.pop3_logout_format = "top=%t/%p, retr=%r/%b, del=%d/%m, size=%s",
 	.pop3_uidl_duplicates = "allow:rename",
-	.pop3_deleted_flag = ""
+	.pop3_deleted_flag = "",
+	.pop3_delete_type = "default:expunge:flag"
 };
 
 static const struct setting_parser_info *pop3_setting_dependencies[] = {
@@ -156,6 +158,24 @@
 
 	if (pop3_settings_parse_workarounds(set, error_r) < 0)
 		return FALSE;
+	if (strcmp(set->pop3_delete_type, "default") == 0) {
+		if (set->pop3_deleted_flag[0] == '\0')
+			set->parsed_delete_type = POP3_DELETE_TYPE_EXPUNGE;
+		else
+			set->parsed_delete_type = POP3_DELETE_TYPE_FLAG;
+	} else if (strcmp(set->pop3_delete_type, "expunge") == 0) {
+		set->parsed_delete_type = POP3_DELETE_TYPE_EXPUNGE;
+	} else if (strcmp(set->pop3_delete_type, "flag") == 0) {
+		if (set->pop3_deleted_flag[0] == '\0') {
+			*error_r = "pop3_delete_type=flag, but pop3_deleted_flag not set";
+			return FALSE;
+		}
+		set->parsed_delete_type = POP3_DELETE_TYPE_FLAG;
+	} else {
+		*error_r = t_strdup_printf("pop3_delete_type: Unknown value '%s'",
+					   set->pop3_delete_type);
+		return FALSE;
+	}
 	return TRUE;
 }
 /* </settings checks> */
diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-settings.h
--- a/src/pop3/pop3-settings.h	Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-settings.h	Wed Aug 12 12:52:06 2015 +0300
@@ -8,6 +8,10 @@
 	WORKAROUND_OUTLOOK_NO_NULS		= 0x01,
 	WORKAROUND_OE_NS_EOH			= 0x02
 };
+enum pop3_delete_type {
+	POP3_DELETE_TYPE_EXPUNGE = 0,
+	POP3_DELETE_TYPE_FLAG,
+};
 /* </settings checks> */
 
 struct pop3_settings {
@@ -24,8 +28,10 @@
 	const char *pop3_logout_format;
 	const char *pop3_uidl_duplicates;
 	const char *pop3_deleted_flag;
+	const char *pop3_delete_type;
 
 	enum pop3_client_workarounds parsed_workarounds;
+	enum pop3_delete_type parsed_delete_type;
 };
 
 extern const struct setting_parser_info pop3_setting_parser_info;


More information about the dovecot-cvs mailing list