Skip to content

Commit e81f021

Browse files
committed
imap: pass \Deleted to midb when used in conjunction with APPEND
When `APPEND INBOX (\Deleted) abc` was executed, the deleted flag was not carried over to the midb wire protocol. The M-INST command was lacking `(D)` in the flags string. Fixes: gromox-0~666
1 parent 1ea21d5 commit e81f021

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

mra/imap/cmd.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,13 +1128,15 @@ static void icp_convert_folderlist(std::vector<enum_folder_t> &pfile) try
11281128
mlog(LV_ERR, "E-1814: ENOMEM");
11291129
}
11301130

1131-
static std::string flagbits_to_s(bool seen, bool answ, bool flagged, bool draft)
1131+
static std::string flagbits_to_s(bool seen, bool answ, bool flagged, bool draft,
1132+
bool del)
11321133
{
11331134
std::string s = "(";
11341135
if (seen) s += midb_flag::seen;
11351136
if (answ) s += midb_flag::answered;
11361137
if (flagged) s += midb_flag::flagged;
11371138
if (draft) s += midb_flag::unsent;
1139+
if (del) s += midb_flag::deleted;
11381140
s += ')';
11391141
return s;
11401142
}
@@ -1999,7 +2001,9 @@ int icp_append(int argc, char **argv, imap_context &ctx) try
19992001
std::any_of(&temp_argv[0], &temp_argv[temp_argc],
20002002
[](const char *s) { return strcasecmp(s, "\\Flagged") == 0; }),
20012003
std::any_of(&temp_argv[0], &temp_argv[temp_argc],
2002-
[](const char *s) { return strcasecmp(s, "\\Draft") == 0; }));
2004+
[](const char *s) { return strcasecmp(s, "\\Draft") == 0; }),
2005+
std::any_of(&temp_argv[0], &temp_argv[temp_argc],
2006+
[](const char *s) { return strcasecmp(s, "\\Deleted") == 0; }));
20032007
}
20042008
std::string mid_string;
20052009
time_t tmp_time = time(nullptr);
@@ -2114,7 +2118,8 @@ static int icp_append_begin2(int argc, char **argv, imap_context &ctx) try
21142118
strcasestr(str_flags, "\\Seen") != nullptr,
21152119
strcasestr(str_flags, "\\Answered") != nullptr,
21162120
strcasestr(str_flags, "\\Flagged") != nullptr,
2117-
strcasestr(str_flags, "\\Draft") != nullptr);
2121+
strcasestr(str_flags, "\\Draft") != nullptr,
2122+
strcasestr(str_flags, "\\Deleted") != nullptr);
21182123
if (str_received == nullptr || *str_received == '\0' ||
21192124
!icp_convert_imaptime(str_received, &ctx.append_time))
21202125
ctx.append_time = time(nullptr);

0 commit comments

Comments
 (0)