Fixes:
- imap placed eml files in the wrong spot. You may need to mmv /var/lib/gromox/user/X/Y/eml1* /var/lib/gromox/user/X/Y/eml/1#1 for the various user directories.
- http: resolve altnames and update user context after authentication success with krb
Enhancements:
- gromox-mbop emptyfld now recognizes a -t option to limit deletion to messages of certain age.
Fixes:
- exmdb: synthesized PR_RTF_COMPRESSED properties (in relation to the "dbg_synthesize_content" config directive) had an incomplete header
- oxcmail: repair inadvertent propid/proptag swap causing TNEF export to fail
- mbop/purge-softdelete: make pathspec SENT/2022 actually work
- imap: messages delete events from OL/g-web now make it to IMAP clients
Enhancements:
- midb: propagate folder change events; IMAP clients now recognize when a message was deleted in g-web/Outlook
- http: RFC 7617 support for the Basic authentication header line
- nsp: allow connections from Windows with UTF-8 locale
- midb: removal of seqid renumbering, which speeds up IMAP SELECT/LIST/FETCH commands.
- authmgr: PAM is now offered as an authentication backend
Fixes:
- http: repair hanging communication with MAPI/RPC connections
- oxcmail: reinstate read requests for non-IPM.Schedule messages
- daemons: set umask such that created files have group write permissions for AAPI
- imap/midb_agent: fix a crash when some JSON files are empty
- midb: avoid a hang during the P-DTLU command when an eml/ file is absent
- mkprivate, mkdomain: repair wrong byte ordering in initial PR_CHANGE_KEYs
Enhancements:
- http: Windows SSO support via HTTP Negotiate authentication
- daemons: support for alternate login names (this allows for assigning shorter usernames for grommunio-web)
- exmdb: augment create_folder and movecopy_folder RPCs with a 32-bit error code, which allows g-web to better detect folders with duplicate names
- ews: implement Subscribe, Unsubscribe, GetEvents, GetUserPhoto
- mbop: add subcommand clear-rwz to clear out RuleOrganizer FAI messages
Behavioral changes:
- exmdb: the delivery_message RPC will now return with status "partial_write" if major parts of a message (body/attachments) could not be written (disk full/permission denied/etc.)
- delivery: partially-written messages now lead to bounce generation and emergency save action to disk
Fixes:
- oxvcard: export to .vcf now positions the VERSION property in accordance with the vCard 4.0 specification.
- oxcmail: cease gratuitous RTF conversion of calendar items
- mysql_adaptor: a wrong string search was used for recipient delimiters, which could lead to Recipient Invalid/User Not Found
Enhancements:
- Define the "suspended" user state (think of it as a "non-receiving shared mailbox").
- emsmdb, zcore: the
emsmdb_max_cxh_per_user
,emsmdb_max_obh_per_session
andzcore_max_obh_per_session
config directives can now be set to 0 for unlimited.
Fixes:
- imap: do not emit continuation request on LITERAL+ (now also for large literals >64K)
- exmdb: ignore softdeleted folders when validating new folder name
- exmdb: explicitly rollback SQLite transactions when the commit operation failed, to resolve cases of
cannot start a transaction within a transaction
- exmdb: ACE entries for anonymous were misreported to clients
Enhancements:
- delivery: support for plus-addresses/recipient delimiters, e.g. <user+extension@example.com>
- delivery: new config directive
lda_recipient_delimiters
- mbop: new subcommand
recalc-size
to recalculate store size
Changes:
- alias_resolve: config directives are no longer read from
/etc/gromox/alias_resolve.cfg
but now from/etc/gromox/gromox.cfg
- oxcmail: do not emit Content-Disposition creation-time/modification-time parameters when those fields are not present in the MAPI object
- Delete unused columns and indexes from the
associations
MariaDB table; (grommunio-admin-api should be updated to >= 1.12)
Last-minute notes:
- When gromox-dbop attempts to upgrade to table schema version 127, an SQL query is issued to set a new PRIMARY KEY on a table. It has been brought to our attention that somewhat older MariaDB server versions (namely 10.4.13, 10.4.22) contain a bug/not_implemented_feature which makes this query never succeed. The issue is resolved in MariaDB 10.6.15 (as used by the Grommunio Appliance) and newer versions. Details are still under investigation.
Enhancements:
- daemons: better SSL_accept error log messages
- alias_resolve: support for nested mlist expansion
- alias_resolve: support for Global Contact Objects
- delivery: SIGHUP triggers a reload of (more) plugins now
- gromox-mbop: add emptyfld options -a, -M
Fixes:
- oxdisco, oab: avoid emitting extraneous NUL byte at end of XML document
- imap: do not emit continuation request on LITERAL+
- mbop: restore emptyfld functionality after switch to empty_folder v2 RPC
- mbop:
delmsg -f DRAFT 12345
did nothing due to a bad translation of the special name
Enhancements:
- emsmdb: eliminiate duplicate message appearing when copying to a private non-default / shared store
- EWS: support the {Create,Delete,Move,Copy,Update,Empty}Folder operation(s)
- EWS: support the {Copy,Move}Item operation(s)
Enhancements:
- ews: support CreateItem, DeleteItem, SendItem requests
- oxm2mt: support multi-valued properties
Fixes:
- kdb2mt: do not abort when --src-mbox is used
- exmdb_provider: opening the detail view of Personal Addressbook entries now works in Outlook, as does selecting them as message recipients
- zcore: fix a flaw in permissions dialog that caused the delegates to be able to see the private items of the delegator
Behavioral changes:
- exch: remove old PHP EWS handler
- zcore: delete getuseravailability RPC and replace by new getuserfreebusy RPC
Enhancements:
- exmdb: attachment storage with hash-based filenames
- exmdb_local: persistent (on-disk) last-autoreply time tracking
- imap: allow large literals with APPEND
- imap: add RFC 7888 support
- oxdisco: allow AutoDiscover information retrieval from secondary mailboxes even if the scndstore_hints table does not have an entry.
- emsmdb: "Mark all as read" in OL (Online mode) now works
Fixes:
- oxcical: resolved another case of recurring appointments shifting due to timezone/daylightbias
- exmdb_provider: resolve constraint failure on movecopy_messages
- email_lib: add back CRLF when MIME::read_head is reconstructing headers
- mapi_lib: resolve an infinite loop during html_to_rtf
- exmdb_provider: ignore absent directories during gromox-mbop purge-datafiles
- exmdb_provider: make exmdb_pf_read_states=1 hide folder sumamry counts as advertised by manpage
- zcore: delegation dialog had erroneously set too many permission bits
Changes:
- exmdb_client: disable timeout during active calls
- delivery: raise context_average_mime limit from 8 to 500
- nsp: drop "custom address list" name suffix from mlists
Fixes:
- imap: restore notifications during IDLE
- midb: do not present softdeleted messages to IMAP
- zcore: validate permissions when inbox rules or folder permissions are edited
- lda_twostep_ruleproc: resolve array out-of-bounds access when resolving named properties
- snapshot: switch back to root user identity to be able to purge snapshots
Enhancements:
- DNSBL filtering mechanism, cf.
man dnsbl_filter
- Address book name resolution now evaluates alias addresses
- pff2mt: speedup operation by 70%+
- emsmdb: strike limits (raise to infinity) for session handles, user handles and notify handles, and raise limit for ems_max_pending_sesnotif to 1K
- emsmdb: new configuration directives ems_max_active_notifh, ems_max_active_sessions, ems_max_active_users, ems_max_pending_sesnotif
- mbop: new subcommands
clear-photo
,clear-profile
,purge-softdelete
,purge-datafiles
Changes:
- The PHP-MAPI profile is now stored in the mail store as a property rather than as a flat file. The upgrade is automatically performed when the MAPI profile gets modified via PHP-MAPI.
- The user profile picture is now stored in the mail store as a property rather than as a flat file. The upgrade is automatically performed when the photo is modified via PHP-MAPI.
/usr/libexec/gromox/cleaner
is obsolete and replaced by mbop subcommandpurge-datafiles
.
Fixes:
- zcore: plug memory leak when address book data structure reloads
- zcore: fix inverted evaluation of RES_CONTENT::comparable
- zcore: moving messages from one store to another obtained CNs from the wrong store and could fail the operation
- oxcical: add TZID for allday events
- imap: consistently show EXISTS status before RECENT
- imap: move EXISTS/RECENT response after SEARCH result
- imap: skip reporting EXISTS/RECENT if folder is unchanged
- imap: make FETCH RFC822 report FLAGS as well
- imap: SEARCH by size used the wrong column
- imap: avoid double status reporting when one message is changed multiple times
- imap: add and populate a per-context seqid list
- midb: unbreak search matching based on dates and sizes
- imap: cease emitting extraneous FETCH FLAGS responses (works around a shortcoming in the KDE kmail client)
- imap: resolve E-1995 erroneously showing when memory use is fine
- emsmdb: avoid hitting an assertion when sort-reloading a table of a deleted folder
Enhancements:
- emsmdb: support forwarding meeting requests from organizers that are not local to the installation
- imap: broadcast changes to mailbox from EXPUNGE commands
- midb: auto-regenerate ext/ digests when missing
- Log the filename of the SQLite database when a query fails
- emsmdb: add log messages for notification queue limits
Fixes:
- exmdb_provider: repair a 4-byte cutoff when reading PR_BODY, PR_TRANSPORT_MESSAGE_HEADERS if they are compressed on disk
- emsmdb: setting multiple mails as read/unread was repaired
- php_mapi: fix a case where proptag arrays had bogus keys
- midb: resolve a crash when a P-SRHL HEADER search has not enough arguments
- zcore: do not lose folder for OP_MOVE rules when that folder is in a public store
- mda: the DATA command in LMTP mode did not emit one status line for every RCPT
- nsp: fix janky addressbook navigation when the GAL has hidden entries
- authmgr: resolve altnames before searching them in the LDAP backend
- php_mapi: reduce memory block retention scopes so that requests with a large response (~128MB+) won't die from Out Of Memory
- midb: fix E-1903 error appearing on shutdown
Enhancements:
- The "Hide from addresbook" functionality has gained another bit, so that name resolution ("Check names" button in OL/g-web) is no longer tied to visibility in the GAL.
- Support for non-default stores in the IMAP and POP3 protocols; use "actualusername!sharedmbox" as the username for login.
- imap: allow setting Recent flag with STORE command
- imap: send TRYCREATE on failed SELECT
- imap: output Junk alongside Spam for the junk folder
- imap: emit special-use flags with plain LIST when so requested in the command
- imap: add LIST response to SELECT/EXAMINE
- pff2mt: add --with-assoc, --without-assoc
Changes:
- daemons: the files /etc/gromox/exmdb_acl.txt, midb_acl.txt, event_acl.txt, timer_acl.txt were made obsolete and replaced by the new (exmdb_provider.cfg) "exmdb_hosts_allow", (midb.cfg) "midb_hosts_allow, (event.cfg) "event_hosts_allow", (timer.cfg) "timer_hosts_allow" directives.
- http: adjust the built-in PHP-FPM socket paths to reflect changes in g-web and g-sync (this impacts test setups that run gromox-http without an nginx in front)
- mda: update "Received" headers in messages to look more like Postfix's
- pff2mt: --without-assoc is now the default (This is only a concern with .ost files, as .pst does not have FAI messages.)
Fixes:
- mbop: support folder strings for delmsg -f as was documented
- oxcmail: do not fail exporting DSNs with unresolvable addresses
- oxcical: do not fail exporting calendar objects with unresolvable addresses
- oxvcard: repair NULL deref when exporting PR_CHILDRENS_NAMES
- exmdb_provider: support mbox_contention*=0 as was documented
- gromox-snapshot: safer parsing of snapshot.cfg
- emsmdb: resolve infinite loop when counting property value size of invalid UTF-8 strings
Behavioral changes:
- exmdb_provider: default to mbox_contention_reject=0
- exch: support absent values with RES_PROPERTY, RES_BITMASK and RES_CONTENT comparisons
- zcore: make mapi_message_imtoinet operate on message instances, not messages
Fixes:
- exmdb_provider: filter duplicate propids when they occur in the mailbox, resolving a failure to export (broken) recipients to MSG, and resolving _one instance of OL sync error 80070057.
- oxvcard: PidLidBusinessCardDisplayDefinition named property was not assigned the right namespace (PSETID_ADDRESS)
- oxcmail: do not abort export routine if SMIME message is lacking an SMIME body (just treat it as empty instead)
- oxcical: do not abort export routine if IPM..Resp. has no attendee
- exmdb_local: perform online lookup of named properties, resolving vcarduid being erroneously assigned propid 0
- exmdb_provider: do not write propid 0 properties to database
- midb, imap: FETCHing some mails did not function due to a misparse of the compat format of the "mimes" structure in mjson_parse_array
- mapi_lib: rectify emission of cf code in htmltortf
- delivery: reduce number of default worker threads to number of client connections to temporarily address "too many connections"
- delivery: retain queue messages on processing errors
- mlist_expand: resolve null dereference during mlist_expand
Behavioral changes:
- delivery: rename delivery_log_file -> lda_log_file (+ log_level)
- Errors from sqlite3_step() will now be logged.
- exch: consistently accept PT_STRING8 & PT_BINARY for RES_CONTENT evaluations
Fixes:
- Repair a null deref during HTML-to-text conversion
- Inbox rules had RES_OR conditions wrongly evaluated
- Synchronization of embedded messages now works, resolving OL sync reports with error 80040301.
- Saving a draft in grommunio-web would erroneously strip the Re: subject prefix
- exmdb_provider: PR_NULL is now excluded from get_all_proptags's results, resolving _one instance of OL sync error 80070057.
- EWS: Detailed FreeBusy requests did not return detailed info
Enhancements:
- authmgr: Alternate username support
- mt2exm: add --skip-notif, --skip-rules options
Behavioral changes:
- Treat standard and extended inbox rules equal per PR_RULE_SEQUENCE, instead of "(by sequence number) all standard rules first, then all (by sequence number) extended rules".
- The build no longer depends on the gumbo-parser library (a HTML parser); instead, it now uses libxml2 to do the same.
- daemons: disable client-side TLS renegotiation in OpenSSL 1.x and LibreSSL (OpenSSL 3.x defaults to this behavior already)
- php_mapi: block opcache from being present in the same process
Enhancements:
- php_mapi: add new functions "nsp_essdn_to_username" and "mapi_strerror" (requires new version of mapi-header-php which does not provide a now-colliding variant)
- mbop: emptyfld/delmsg support folder names now
- dscli: added an --eas option
- oxdisco: support autodiscover.json requests
- exmdb_provider: report overquota events with MAPI_E_STORE_FULL rather than MAPI_E_DISK_FULL
Fixes:
- php_mapi: fix stack corruption in zif_mapi_createfolder
- exmdb_provider: resolved possible use-after-free in OP_DELEGATE rule handling
- emsmdb: fix stream_object::commit evaluating wrong member for open flags
- Parse Windows timezone list better and support multiple IANA timezone names per territory
Behavioral changes:
- exmdb_provider: enable CID file compression by default
- exch: remove old PHP-OXDISCO and PHP-OAB implementation
Enhancements:
- pff2mt: support non-Unicode PFF files
- ldap_adaptor: read ldap_start_tls, ldap_mail_attr from orgparam table
- Support Emojis in HTML-to-RTF conversion code
- exmdb_provider: implement message store softdelete count properties
- dbop_sqlite: guard schema upgrades with transaction
Fixes:
- Do not fail entire HTML-to-RTF conversion or calls like getpropvals(PR_RTF_COMPRESSED) when encountering garbage bytes.
- exmdb_provider: have folder message count properties respect softdelete
- zcore: mapi_copyto had inverted meaning of MAPI_NOREPLACE
Implementation changes:
- Replace custom SMTP sending code with vmime's
- emsmdb: temporarily deactivate ROP chaining for OL2013,2016 to work around a case where OL corrupts larger attachments (2 MB+)
Behavioral changes:
- The /usr/libexec/gromox/rebuild utility has been removed in favor of using SQLite's own .clone / .recover commands.
- dbop_sqlite: perform integrity check ahead of sqlite database upgrades
Fixes:
- emsmdb: sending mail could have yielded success even if there was an outgoing SMTP server outage
- exmdb_provider: repair SQL logic errors showing up when a folder's contents are requested in Conversation mode
- exmdb_provider: only delete links, not messages, from search folders
Enhancements:
- tools: add --integrity option for mkprivate, mkpublic, mkmidb
Behavioral changes:
- exmdb_provider: the "exmdb_schema_upgrade" config directive is now enabled by default
- midb: the "midb_schema_upgrade" config directive is now enabled by default
- exmdb_provider: increase default value for the "max_store_message_count" directive from 200k to infinity
- mkmidb: removed the no-op -T command-line option
- dscli: XML dumps are now only shown with the (newly added) -v option
Enhancements:
- exmdb_provider: support for private store message and folder softdelete (and thus the Recover Deleted Items feature in OL)
- http: print HTTP responses in full, not just until the first 0
- mapi_lib: parse "Received" headers into PR_MESSAGE_DELIVERY_TIME for the sake of EML imports
- oxm2mt: named property translation
- oxdisco: homeserver support for EAS block
- zcore: allow opening oneoff entryids with openabentry RPC
Fixes:
- emsmdb: work around OL crash with Recover Deleted Items dialog
- emsmdb: rework interpretation of PR_SENT_REPRESENTING on IPM.Schedule objects (relates to the organizer of a meeting when such meeting is forwarded)
- Deletion of a folder from a public store did trash the store size counter and reduce it by an arbitrary amount towards 0, reporting the store to be smaller than it really was.
- zcore: perform texttohtml conversion in UTF-8 not Windows-1252
- nsp: attempt to fix infinite function recursion when trying to resolve ESSDN which are present in the GAB forest but out-of-organization
- oxcmail: recognize RFC822/5322 dates without a day-of-week part
- mt2exm: avoid running into PF-1123 error when -D option is used
- dscli: repair the warning that the tool was not built with DNS SRV support
- oxdisco: avoid read beyond end of buffer when request_logging is on
- exmdb_provider: fix an out of bounds write when PR_HTML_U is requested
Enhancements:
- gromox-mbop: added "emptyfld" command
- gromox-oxm2mt: new utility to read .msg files
Fixes:
- midb: IMAP SEARCH commands had numeric sequence ranges "m:n" misparsed
- midb, imap: recognize "" in sequence sets (alias for ":*")
- nsp: resolve a wrong allocation size that led to a crash
Changes:
- oxdisco: new module providing the AutoDiscover endpoints, replacing the PHP-based implementation (To go back to the old implementation, set http.cfg:http_old_php_handler=1)
- oab: new module providing the OAB endpoint
- ews: new module providing the EWS endpoint, replacing the PHP-based implementation
- delmsg: program has been merged into gromox-mbop as a subcommand
- emsmdb: rework interpretation of the PR_SENT_REPRESENTING* proptags on meeting request objects
Enhancements:
- kdb2mt: full user resolution with new option --mbox-name/--user-map
- kdb2mt: translate PR*_ADDRTYPE from ZARAFA to SMTP (via --user-map)
Fixes:
- kdb2mt: repair printing of tree graphics when ACL lists are dumped with -t -p
- Fixed a parsing inconsistency between LF and CRLF mail input
- zcore: support on-the-fly EML (re-)generation in zs_messagetorfc822
- zcore: allow zs_linktomessage RPC if store permissions allow for it
- emsmdb: avoid synchronizing PR_PREVIEW
Changes:
- kdb2mt: rename SQL parameter options
- kdb2mt: rename mailbox selection options
- kdb-uidextract: new output format
- kdb2mt: add new --acl option for fine-grained control over ACL extraction
- nsp: avoid generating ephemeral entryids from ResolveNamesW (Selecting addresses from the "From" dropdown in OL's compose mail dialog works now)
- zcore: reduce threads_num to below rpc_proxy_connection_num (Addresses "exmdb_client: reached maximum connections ...")
- emsmdb: stop syncing named props on folders to OL (it does not support them anyway)
Enhancements:
- exmdb_provider: on-disk content file compression, controllable using the "exmdb_file_compression" config directive (affects only new files)
- tools: new utility gromox-compress to compress existing content files
- exmdb_provider: support evaluation of inbox rules that have RES_CONTENT restrictions with PT_BINARY properties
Fixes:
- Asynchronous notification over MH was not responsive due to a malformed HTTP response, which was fixed.
Changes:
- Bounce template generation was rewritten for size
- mysql_adaptor: silence PR_DISPLAY_TYPE_EX warning for admin user
- emsmdb: let ropSaveChangesMessage return ecObjectDeleted
- exmdb_provider: set PR_RULE_ERROR property when Deferred Error Messages (DEMs) are generated
Enhancements:
- exmdb_provider: mlists that were granted the StoreOwner permission bit through an ACL now propagate it to the individuals in the mlist.
Fixes:
- imap: the response to the IDLE command had been malformed
- emsmdb: On outgoing mails, the Return-Receipt-To (Read Receipt Request) header was malformed. On the incoming side, this would then be translated back to invalid@invalid.
Changes:
- http: only show HTTP context log messages when the "g_http_debug" config directive is set to a non-zero value
Enhancements:
- Daemons have a new log level directive (e.g. http_log_level, zcore_log_level, etc.) which defaults to 4 (NOTICE) and needs to be set to 6 (DEBUG) before other debug knobs like http_debug, zrpc_debug, etc. actually emit something.
- User accounts can now be hidden from the GAL and other address lists
- The gromox-dscli command-line utility now performs DNS SRV lookups.
- mod_cache: remodel the whole module to be a passthrough to the kernel's buffer cache by using mmap and thus saving a lot of resident memory.
Changes:
- The logthru service plugin has been removed in favor of direct function calls.
- log_plugin.cfg is no longer used, switch to (e.g.) `http.cfg`:http_log_level.
Fixes:
- oxcical: resolve Exchange complaining about the X-MICROSOFT-CDO-OWNERAPPTID line our implementation generated
- dscli: in absence of SRV records, fall back to autodiscover.<domain>, not <domain>.
- ldap_adaptor: the per-org LDAP base was erroneously used with the default LDAP.
- midb: resolve a startup crash in conjunction with musl libc.
- exmdb_provider: fix a buffer overrun in common_util_load_search_scopes
- lib: rectify return value of html_to_plain_boring. On systems without w3m installed, HTML-to-text conversion would produce garbage when the output was exactly 65001 bytes long.
- mod_cache: support continuation via curl -C and wget -c
- mod_cache: report errors with various 4xx and 5xx status codes rather than exclusively 404
Enhancements:
- tools: add kdb-uidextract and kdb-uidextract-limited scripts to facilitate ACL conversion
- Per-organization LDAP server support
- Show more distinct icons in GAL (mailing lists now show the ML icon)
- Support PR_THUMBNAIL_PHOTO for room, equipment and mlists
- FreeBSD and OpenBSD compilation support
- nsp: reload config on SIGHUP
- oxcical: minimal VJOURNAL export
- oxcical: implement VTODO export
Fixes:
- zcore, emsmdb: remodel code relating to send-on-behalf/-as detection. zcore now sends with the exact PR_SENT_REPRESENTING as specified by a client.
- php_mapi: make mapi_parseoneoff recognize UTF-16 ONEOFF_ENTRYIDs
Changes:
- authmgr: obsolete the auth_backend_selection config directive's values always_mysql and always_ldap; these are treated like externid now.
- imap: rename imap_force_starttls config directive to imap_force_tls and imap_support_starttls to imap_support_tls, since it affects encryption as a whole, not just the STARTTLS command on the unencrypted port.
- pop3: rename the pop3_force_stls config directive to pop3_force_tls and pop3_support_stls to pop3_support_tls, since it affects encryption as a whole, not just the STLS command on the unencrypted port.
Enhancements:
- kdb2mt: detect unsupported "db" attachment layout
- kdb2mt: add option for mapping ACL identities using a text file
- nsp: support reading PR_EMS_MEMBER property
- zcore: support GetContentsTable on distlist objects
- exm2eml: add options --ical and --vcard
Fixes:
- oxcical: some RECURRENCE-ID may have been emitted based on undefined contents
- oxcical: emit allday events as YMDHMS when YMD cannot be computed due to lack of timezone information
Changes:
- email_lib: reimplementation of MJSON parsing using jsoncpp
Enhancements:
- kdb2mt: add a size column to the disambiguation table
- exmdb_provider: added the "exmdb_search_yield" and "exmdb_search_nice" config directives
- exmdb_provider: add a vacuum RPC (and expose via gromox-mbop(8gx))
- emsmdb: implement cached mode cross-store move support
Fixes:
- kdb2mt: filter unwanted properties on writeout rather than readout (rerecognize special folders)
- oxcical: recurring appointments now have their summary ("effective ... from 02:00 to 02:15") displayed without uncanny time shift
- oxcical: oxcical_export_timezone had missed emitting BYMONTHDAY subvalues
- oxcical: avoid month wraparound with recurring events in December
- dscli: fix nullptr deref when -x option is used
- nsp: show DT_DISTLIST icon for mlists
- oxcical: set PidLidRecurring and PidLidRecurrenceType tags when importing recurring events
- Check for iconv capabilities on startup so that we do not start on containers with too few libc components installed
- zcore: avoid UAF when unpacking SMIME messages
- imap: do not emit body-QP in () groups when encoded-word-QP is expected
- imap, pop3: avoid hanging clients if response buffer is full
Changes:
- The default value for "exmdb_search_pacing" was changed to 250 to improve interactivity with OL during online search.
- oxvcard: disable pedantic behavior on import
Enhancements:
- oxcmail: add support for multi-iCal and multi-vCard support
- php_mapi: add
mapi_icaltomapi2
andmapi_vcftomapi2
APIs - emsmdb, zcore: Send-As support
- midb_agent: make midb command buffer size for SRHL/SRHU configurable
Fixes:
- freebusy: do not publicize private recurrence exceptions
- Delayed Sending had left messages in Outbox
- midb: P-DTLU command incorrectly sorted by received date
- emsmdb: the contact folder list erroneously rejected sort requests that grouped and sorted by the same column
- oxcical: add missing
PR_ATTACH_METHOD
to iCal appointment collection members - oxvcard: do not map unrecognized types of telephone numbers to
PR_RADIO_TELEPHONE_NUMBER
on import - oxvcard: avoid filing
PR_NORMALIZED_SUBJECT
with garbage - exch:
PR_SENDER_ENTRYID
was filled with the wrong value in delegate mail sending - exmdb_provider: avoid sending
PR_DISPLAY_NAME
to clients twice
Changes:
- The config directives "service_plugin_list", "service_plugin_path", "hpm_plugin_list", "hpm_plugin_path", "proc_plugin_list", "proc_plugin_path", "mpc_plugin_list", "mpc_plugin_path" have been removed.
Fixes:
- nsp: repaired a nullptr deref with the resolvenamesw RPC
- nsp: fix erroneous writeout to path "/delegates.txt" (would always fail due to absence of filesystem permission)
- nsp: disable OneOff synthesis for non-existing GAL objects
- mh_nsp: fix seekentries RPC performing garbage ANR matching
- oxcmail: avoid running the encoded-word decoder in sender/recipient names twice (umlaut breakage)
- oxcical: avoid crash when RRULE:BYMONTH=12 is used
- exmdb_local: reword duplicate error strings for delivery failures
Enhancements:
- kdb2mt: support recovering broken attachments lacking PR_ATTACH_METHOD
- kdb2mt: remove PK-1005 warning since now implemented
- delmsg: support mailbox lookup using just the mailbox directory name
- http: added the "msrpc_debug" config directive
- nsp: added the "nsp_trace" config directive
- mh_nsp: make the addition of delegates functional
Fixes:
- imap: sender/recipient umlauts were not represented correctly, which has been fixed
- zcore: repair retrieval of PR_EMS_AB_THUMBNAIL_PHOTO
- eml2mt: avoid putting non-vcard messages into Contacts by default
- oxcmail: better handle To/Cc/Bcc/Reply-To fields when the target mailbox display name contains a U+002C character.
- zcore: allow settings freebusy permission bits for calendars
Enhancements:
- http, imap, pop3, delivery-queue: new config directives
http_listen_addr
,imap_listen_addr
,pop3_listen_addr
andlda_listen_addr
- php_mapi: support imtomapi
parse_smime_signed
option - midb: treat folders with absent
PR_CONTAINER_CLASS
likeIPF.Note
- mt2exm: added a
-D
option that will do a delivery rather than import - imap: raised the default value for
context_average_mitem
to 64K
Changes:
- autodiscover: enable default advertisement of RPCH & MH irrespective of User-Agent
- midb, zcore, exmdb_local: remove config directive
default_timezone
Fixes:
- exmdb_provider: repair PR_MEMBER_NAME transition
- zcore: fix randomly occurring set_permission failures
- autodiscover: resolve '&' being misrepresented
- autodiscover: force-remove single quotes from ini values
- imap: improved the tokenization for unusual values found in the From/To/Reply-To etc. headers
- imap: stop emitting excess parenthesis pairs for "RFC822" field values during FETCH
- imap: stop offering STARTTLS capability keyword when the STARTTLS command can, at the same time, not be issued anyway
- imap: IMAP commands emitted to the log (under
imap_cmd_debug
) were truncated sometimes - midb: resolve potential crash when the IMAP
SEARCH
command is used
Enhancements:
- imap: emit gratuitous CAPABILITY lines upon connect and login
- imap, pop3: support recognizing LF as a line terminator as well (other than CRLF)
Changes:
- midb: change mail_engine_ct_match to use stdlib containers
- oxcmail: stop emitting zero-length display-names
- oxcmail: always generate angle brackets for exported addresses
Enhancements:
- Added a config directive
tls_min_proto
so one can set a minimum TLS standard when your distro doesn't have crypto-policies (https://gitlab.com/redhat-crypto/fedora-crypto-policies ) - autodiscover.ini: new directives
advertise_mh
andadvertise_rpch
for finer grained control over individual protocol advertisements; replacesmapihttp
. - exmdb_provider: lifted the folder limit from 10k to 28 billion
- oxcmail: cease excessive base64 encoding.
- Messages are now preferably encoded as quoted-printable during conversion to Internet Mail format. This might help with spam classification.
- delivery-queue: the maximum mail size is now strictly enforced rather than rounded up to the next 2 megabytes
- gromox-dscli: the -h option is no longer strictly needed, it will be derived from the -e argument if absent
Fixes:
- http: resolve a crash on shutdown due to wrong order of teardown
- exmdb_provider: fix buffer overread (crash) when a truncated /cid/N file is read.
- emsmdb: fix buffer overread (crash) when common_util_check_message_class is called with an empty string.
Fixes:
- exmdb_provider: fix search opening the exmdb store with wrong flags and skipping 200 messages during the search operation
- exmdb_provider: speed up Online Mode searches by 14 to 18-fold
- mt2exm: avoid crash when an import message has no properties at all
Enhancements:
- exmdb_provider: add a config directive
exmdb_search_pacing
Changes:
- kdb2mt: skip
IPM.Microsoft.FolderDesign.NamedView
rather thanIPM.MessageManager
messages
Fixes:
- imap: add a default for the imap_cmd_debug directive
- service_loader: resolve crash when first module is unloadable
- eml2mt, exm2eml: rectify wrong service plugin search path
Enhancements:
- eml2mt: add iCalendar and vCard file import
- doc: added configuration file overview lists to gromox(7)
- kdb2mt: skip IPM.MessageManager FAI messages (cause Outlook to sometimes refuse opening a folder)
Changes:
- The /usr/libexec/gromox/autodiscover command has been renamed to just gromox-dscli.
Fixes:
- lib: repair wrong propid for PR_IPM_PUBLIC_FOLDERS_ENTRYID
- exmdb_provider: avoid use-after-free crash related to Public Store read state username handling
- oxcmail: rework classification of S/MIME mails
- email_lib: make ICAL_TIME::twcompare behave symmetrically
- oxcical: appointments were prone to being in the wrong timezone due to DTSTART values being emitted with dayofmonth 32..35 in certain years
- exmdb_provider: output autosynthesized HTML in the proper character set
Enhancements:
- doc: mention issues related to senders/recipients with ZARAFA address type
- autodiscover: test URLs inside Autodiscover responses for validity
- exmdb_provider: add "exmdb_pf_read_states" config directive
- exmdb_provider: add "exmdb_pf_read_per_user" config directive
- imap: add directive "imap_cmd_debug"
Changes:
- zcore: return ecNotFound from mapi_getstoreentryid when unable to resolve user
Fixes:
- Resolve a use-after-free in gromox-eml2mt
- oxcmail: conversion of Reply-To MAPI field to Internet Mail had only used the last ONEOFF-type recipient, now it uses all ONEOFF recipients.
- oxcmail: set IPM.Note.SMIME.MultipartSigned only for incoming S/MIME mails, not for OpenPGP mails.
- autodiscover: Change the way autodiscover.ini is parsed. This allows a few more non-alphanumeric characters in the MariaDB password. ';' is still unusable.
- exmdb_provider: Evaluate restrictions against absent values differently; this makes messages without a sensitivity tag and which are located in a non-default store visible in Outlook again.
- pop3: SIGHUP now really reloads pop3_cmd_debug from the .cfg file
Changes:
- zcore: entryids for PAB entries now follow the ZCSAB entryid scheme
Known issues:
- oxcmail: Reply-To still skips EX-type recipients (W-1964)
Enhancements:
- kdb2mt: added the --with-acl option for partial conversion of ACLs
- pff2mt: added the --only-obj option to extract a specific object
- mt2exm: added the -B option for the placement of unanchored messages
- eml2mt: new utility to import mails from files
- exmdb_provider: new config directive "exmdb_schema_upgrades"
- midb: new config directive "midb_schema_upgrades"
- mkprivate, mkpublic and mkmidb now recognize the -U option to upgrade SQLite database schemas
- mbop: new utility
- rebuild: added progress indicator
- zcore: new config directive "zcore_max_obh_per_session"
- emsmdb: new config directives "emsmdb_max_obh_per_session", "emsmdb_max_cxh_per_user" to allow higher resource use when a lot of stores are used by an Outlook profile (warning W-1580).
Fixes:
- emsmdb: no longer send folder named properties in ICS streams
- mapi_lib: resolve use-after-free in idset::remove
- http: cure a crash in pdu_processor_auth_bind_ack when NTLMSSP authentication is attempted
- exmdb_client: when the exmdb server is not reachable, fail immediately rather than timeout
- Change SQLite db schema to use BLOB column type/affinity instead of NONE, resolving an unwanted auto-conversion from certain strings that look like numbers, e.g. E.164 telephone numbers without spaces.
- lib: add missing RFC 2047 Base64 recognition to some mail functions
- lib: autodetect iso-2022-jp-ms (un)availability in iconv to resolve conversion problems with RFC 2047 encoded-words using iso-2022-jp
Behavioral changes:
- rebuild: no longer performs implicit schema updates; see gromox-mkprivate/mkpublic/mkmidb -U, or the exmdb_schema_upgrades directive for replacement.
- rebuild: no longer performs db unload/reload; this operation moved to gromox-mbop.
- zcore: move socket creation after privilege drop
Enhancements:
- The mkprivate, mkpublic, mkmidb utilities gained an -f option.
- autodiscover: New diagnostic utility to analyze Autodiscover message from the command-line.
- gromox-exm2eml: New diagnostic utility to export one message as Internet Mail.
- delmsg: New diagnostic utility to delete messages in an ICS-conforming way.
- exmdb_provider: New config directive "sqlite_debug" for enabling analysis of all SQLite queries made.
- nsp: New config directive "nsp_trace" for enabling analysis of (some) NSPI RPC calls and their parameters.
Fixes:
- exmdb_provider: Abort asynchronous search folder population when the very search folder has been closed.
- exmdb_providier: do not close idle databases that still have active notification listeners
- nsp: Fix janky row seeking and crashing when using the name search feature in Outlook's Address Book dialog.
- mysql_adaptor: Lookup of rooms and equipment by maildir has been restored.
- midb had erroneously processed only the first command for every network read
- exmdb_client again groups notify connections per PID
Changes:
- nsp: When performing a name search in Outlook's Address Book dialog, scan the entire table rather than just the entries from the currently highlighted line forwards.
Enhancements:
- emsmdb: Faststream temporary state files are now written to /var/tmp/gromox instead and with O_TMPFILE, because they need not be persisted at all, and if /var/lib/gromox is a network filesystem, the network roundtrip can be eliminated.
- exmdb_provider: emit a log message when host not in exmdb_acl
- ldap_adaptor: add a "ldap_edirectory_workarounds" config directive
- zcore: user settings are saved to disk much more rapidly now (Settings could get lost when zcore terminated unexpectedly because of very long caching periods.)
- zcore: allow reducing zarafa_threads_num directive to a minimum of 1
Fixes:
- oxcmail: conversion of recurring meeting requests from MAPI to IM/RFC5322 misconstructed the exmdb RPC for querying PidLidTimeZoneStruct, likely failing the export as a whole.
- exmdb_provider: avoid a SQL query error when placing a new message into public folder
- exmdb_provider: delete W-1595/W-1596 false positive warning
- exmdb_provider: avoid giving a negative/wrapped unread message count for folders (PR_CONTENT_UNREAD)
- exmdb_provider: the presence of PR_PARENT_DISPLAY (normally a computed property) in the sqlite db (hence not computed) had caused the READ_MESSAGE RPC to fail
- kdb2mt: skip importing PR_PARENT_DISPLAY
- kdb2mt: skip importing PR_ACL_DATA, PR_RULES_DATA, PR_EC_WEBACCESS_SETTINGS_JSON (has KC-specific entryids that have no meaning when in Gromox)
- zcore: cure an out-of-bounds access in container_object_get_user_table_all_proptags
- zcore: fix mis-setting of the internal/external OOF message
- mkmidb: fix a startup crash (add missing CFG_TABLE_END marker)
- authmgr: zero-terminate reason string
Known issues:
- emsmdb: Moving a message from one store to another in Cached Mode is rejected; a new message "E-1664: message has GUID of another store, cannot import" is produced until implemented.