Fixed imap_append() from clearing all flags on messages and avoid purge_user() from purging the wrong Visit records.
See merge request citadel/citadel!1
new_msgnum = CtdlSubmitMsg(msg, NULL, "");
}
if (new_msgnum >= 0L) {
+ if (IsEmptyStr(new_message_flags)) {
+ imap_do_append_flags(new_msgnum, new_message_flags);
+ }
IReplyPrintf("OK [APPENDUID %ld %ld] APPEND completed",
GLOBAL_UIDVALIDITY_VALUE, new_msgnum);
}
/* We don't need this buffer anymore */
CM_Free(msg);
-
- if (IsEmptyStr(new_message_flags)) {
- imap_do_append_flags(new_msgnum, new_message_flags);
- }
}
PerformUserHooks(&usbuf, EVT_PURGEUSER);
// delete any existing user/room relationships
- cdb_delete(CDB_VISIT, &usbuf.usernum, sizeof(long));
+ // Commenting out since it was assuming the user number was
+ // at the top of the index. Room number is actually first.
+ // Auto-Purge will clean up the records later, so not worth
+ // scanning all the records here.
+ //cdb_delete(CDB_VISIT, &usbuf.usernum, sizeof(long));
// delete the users-by-number index record
cdb_delete(CDB_USERSBYNUMBER, &usbuf.usernum, sizeof(long));
# Source our data structures from the real live working code
SERVER_H=server/server.h
+tail_opt=
+tail +1 ${SERVER_H} > /dev/null 2>&1
+if [ $? != 0 ] ; then
+ tail_opt=-n
+fi
+
# Generate the "32-bit" versions of these structures.
# Note that this is specifically for converting "32-bit to 64-bit" -- NOT "any-to-any"
convert_struct() {
start_line=$(cat ${SERVER_H} | egrep -n "^struct $1 {" | cut -d: -f1)
- tail +${start_line} ${SERVER_H} | sed '/};/q' \
+ tail ${tail_opt} +${start_line} ${SERVER_H} | sed '/};/q' \
| sed s/"^struct $1 {"/"struct ${1}_32 {"/g \
| sed s/"long "/"int32_t "/g \
| sed s/"time_t "/"int32_t "/g \