gromox — overview of the Gromox groupware server


Gromox is a groupware server capable of serving as a replacement for Microsoft Exchange. Connectivity options include RPC/HTTP (Outlook Anywhere), IMAP, POP3, an SMTP-speaking LDA, and a PHP module with a Z-MAPI function subset.

Gromox relies on other components to provide a sensibly complete mail system, such as Postfix as a mail transfer agent, and grammm-admin for user management. A web interface is available with grammm-web. The grammm distribution ships these essentials and has a ready-to-run installation of Gromox. system.

Configuration files

Program configuration files reside within /etc/gromox. Most of the programs have a config_file_path directive with which the search path for further config files can be specified. For example, http(8gx) defaults to config_file_path=/etc/gromox/http:/etc/gromox, so the mysql_adaptor(4gx) plugin as loaded by http will first try /etc/gromox/http/mysql_adaptor.cfg, then /etc/gromox/mysql_adaptor.cfg. This allows having one file that is shared between multiple programs as well as being able to override on a per program-basis.


  • User information is held in a MariaDB/MySQL database. This database can be accessed by multiple Gromox servers, and so enables distributed Gromox operation. The MariaDB system itself provides the necessary utilities for distributing or replicating this database.

  • Per-user e-mail messages are stored in a SQLite database (e.g. /var/lib/gromox/user/m1/1/1/exchange.sqlite3), as is a message index (e.g. /var/lib/gromox/user/m1/1/1/midb.sqlite3). These are normally only used by one system, but can be shared through network filesystems provided that file locking is properly implemented in the filesystem driver. Normal file mechanisms can be used to backup or transfer the database to another Gromox host.

Exchange subsystem

  • autodiscover(4gx) — Autodiscover HTTP Service Protocol handler

  • exchange_emsmdb(4gx) — http(8gx) processing plugin for the Wire Format Protocol (Outlook/Exchange RPCs).

  • exchange_nsp(4gx) — http(8gx) processing plugin for the Exchange Server Name Service Provider Interface Protocol.

  • exchange_rfr(4gx) — http(8gx) processing plugin for the Address Book Name Service Provider Interface Referral Protocol.

  • exmdb_provider(4gx) — http(8gx) service plugin for exmdb connections

  • freebusy(8gx) — C++ helper for the EWS Freebusy mechanism

  • http(8gx)

  • mod_cache(4gx) — http(8gx) processing plugin for serving objects from a local filesystem

  • mod_fastcgi(4gx) — http(8gx) processing plugin for proxying requests to FastCGI servers

  • mod_rewrite(4gx) — http(8gx) processing plugin for altering HTTP request URIs before processing

  • timer(8gx) — deferred command executor

PHP-MAPI subsystem

  • rtf2html(1gx) — C++ helper for php_mapi’s mapi_decompressrtf function

  • zcore(8gx)

Mail retrieval agent subsystem

  • imap(8gx) — IMAP server

  • midb_agent(4gx) — Service plugin for conversing with midb(8gx)

  • pop3(8gx) — POP3 server

Local delivery agent

  • alias_translator(4gx) — Alias resolution plugin for delivery(8gx)

  • delivery(8gx) — Backend for local delivery

  • domain_list(4gx) — instance of str_table(4gx)

  • message_enqueue(4gx) — Message enqueueing flusher plugin for smtp(8gx)

  • smtp(8gx) — SMTP frontend for local delivery

  • str_filter(4gx)

  • str_table(4gx) — string table match plugin

Auxiliary services

  • pam_gromox(8gx) — a PAM plugin to authenticate with Gromox

  • rtf2html(1gx) — C++ helper for php_mapi’s mapi_decompressrtf function

  • adaptor(8gx)

  • event(8gx)

  • midb(8gx)

System administration

  • gromox-dbop(8gx) — Database maintenance utility

  • gromox-mailq(8gx) — SMTP queue lister

  • mkmidb(8gx)

  • mkprivate(8gx)

  • mkpublic(8gx)

  • rebuild(8gx)

  • sa.cfg(5gx) — configuration file for system administration CGI programs

Service plugins

  • at_client(4gx) — Service plugin for deferred command execution with at(1)

  • authmgr(4gx) — Demultiplexer for authentication requests

  • ip6_container(4gx) — trivial source connection counter

  • ldap_adaptor(4gx) — LDAP connector for user metadata and authentication

  • logthru(4gx) — service plugin for a stdout/file logger

  • mysql_adaptor(4gx) — MySQL/MariaDB connector for user metadata and authentication

  • textmaps(4gx) — Various data maps

  • timer_agent(4gx) — Service plugin for deferred command execution with timer(8gx)

Language bindings

  • mapi(4gx) — PHP module for Gromox services

Listening sockets

  • /run/gromox/zcore.sock — zcore(8gx)

  • *:25 — smtp(8gx) SMTP service

  • *:80 — http(8gx) HTTP service

  • *:110 — pop3(8gx) POP3 service

  • *:143 — imap(8gx) IMAP service

  • *:443 — http(8gx) HTTP over implicit TLS

  • *:993 — imap(8gx) IMAP over implicit TLS

  • *:995 — pop3(8gx) POP3 over implicit TLS

  • [::1]:3344 — zcore(8gx) management console

  • [::1]:4455 — imap(8gx) management console

  • [::1]:5000 — exmdb_provider(4gx) plugin inside http(8gx)

  • [::1]:5555 — midb(8gx) service

  • [::1]:5566 — smtp(8gx) management console

  • [::1]:6666 — timer(8gx) service

  • [::1]:7788 — pop3(8gx) management console

  • [::1]:8899 — http(8gx) management console

  • [::1]:9900 — midb(8gx) management console

  • [::1]:22222 — pad(8gx) service

  • [::1]:33333 — event(8gx) service


The exact paths depend on the options used when Gromox’s build was configured. Especially the path for libraries, represented in this documentation as /usr/lib/gromox, may for example actually be /usr/lib64/gromox or /usr/lib/riscv64-linux-gnu, depending on the platform.

  • /usr/lib/gromox/libgxf_*.so: flusher plugins for smtp(8gx)

  • /usr/lib/gromox/libgxh_*.so: HTTP processing plugins for http(8gx)

  • /usr/lib/gromox/libgxm_*.so: hook plugins for delivery(8gx)

  • /usr/lib/gromox/libgxp_*.so: PDU processing plugins for http(8gx)

  • /usr/lib/gromox/libgxs_*.so: service plugins