Sendmail and tinyCDB on OmniOS stable

Some people do not want to use Oracle DB (former Berkeley DB) because I guess the newer versions have changed licensing terms. No worries, Sendmail supports CDB maps. This guide assumes you have built and installed CDB library to /opt/site/lib and CDB header to /opt/site/include according to my instructions.

Here is sendmail.mc

divert(-1)
divert(0)dnl
VERSIONID(`$Id: generic-solaris.mc,v 8.14 2013-11-22 20:51:08 ca Exp $')
OSTYPE(solaris2)dnl
DOMAIN(generic)dnl
define(`ALIAS_FILE', `cdb:/etc/mail/aliases')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
TRUST_AUTH_MECH(`PLAIN LOGIN')dnl
define(`confAUTH_OPTIONS', `A p y')dnl
define(`confLOG_LEVEL', `14')dnl
define(`confSERVER_CERT', `/etc/mail/certs/omnios.local.crt')dnl
define(`confSERVER_KEY', `/etc/mail/certs/omnios.local.key')dnl
define(`confCLIENT_CERT', `/etc/mail/certs/omnios.local.crt')dnl
define(`confCLIENT_KEY', `/etc/mail/certs/omnios.local.key')dnl
define(`confCACERT', `/etc/mail/certs/ca.crt')dnl
define(`confCACERT_PATH', `/etc/mail/certs')dnl
VIRTUSER_DOMAIN_FILE(`/etc/mail/virtuser-domains')dnl
FEATURE(`tls_session_features')dnl
FEATURE(access_db, `cdb -o -T<TMPF> /etc/mail/access')dnl
FEATURE(blocklist_recipients)dnl
FEATURE(local_lmtp)dnl
FEATURE(mailertable, `cdb -o /etc/mail/mailertable')dnl
FEATURE(`virtusertable', `cdb -o /etc/mail/virtusertable')dnl
MAILER_DEFINITIONS
define(`confLOCAL_MAILER', `cyrusv2')dnl
define(`CYRUSV2_MAILER_ARGS', `FILE /var/opt/ooce/cyrus/socket/lmtp')dnl
MAILER(cyrusv2)dnl
MAILER(smtp)dnl
LOCAL_CONFIG
O SMTPUTF8=true

Here is site.config.m4

define(`confMAPDEF', `-DNEWDB -DCDB -DMAP_REGEX -DSOCKETMAP -DNAMED_BIND=1 -I/opt/ooce/include/ -L/opt/ooce/lib -L/opt/ooce/lib/sasl2 -L/opt/ooce/lib/amd64')dnl
define(`confINCDIRS', `-I/opt/ooce/include/')dnl
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -D_FFR_TLS_1 -DTLS_EC -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE -DDANE -D_FFR_EKU_NOCLIENTAUTH -D_FFR_KEX -DHASUNSETENV')dnl
APPENDDEF(`confLIBDIRS', `-L/opt/ooce/lib/amd64 -R/opt/ooce/lib/amd64 -L/opt/site/lib -R/opt/site/lib')dnl
APPENDDEF(`confINCDIRS', `-I/opt/ooce/include -I/opt/site/include')dnl
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto -ldb -lsasl2')dnl
APPENDDEF(`confENVDEF', `-DSASL=2 -I/opt/ooce/include/')dnl
APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')dnl
APPENDDEF(`confMAPDEF', `-DLDAPMAP -DLDAP_DEPRECATED')dnl
APPENDDEF(`confENVDEF', `-DSM_CONF_LDAP_MEMFREE=1')dnl
APPENDDEF(`confENVDEF',`-DUSE_EAI')dnl
APPENDDEF(`confLIBS', `-licuuc -lldap -llber -lcdb')dnl

After running newaliases and makemap cdb access < access and so on, you will have:

root@omnios:~# ls -l /etc/mail/*.cdb
-rw-r----- 1 root root 2138 Jul 5 02:21 /etc/mail/access.cdb
-rw-r----- 1 root smmsp 2169 Jul 5 02:20 /etc/mail/aliases.cdb
-rw-r----- 1 root root 2160 Jul 5 02:22 /etc/mail/mailertable.cdb
-rw-r----- 1 root root 2115 Jul 5 02:21 /etc/mail/virtusertable.cdb

NOTE: if ldd /usr/sbin/sendmail shows that libcdb.so.1 is not found, you can append /opt/site/lib to runtime linker's path:

crle -64 -c /var/ld/64/ld.config -l /lib/64:/usr/lib/64:/opt/ooce/pgsql-18/lib/amd64/:/opt/ooce/lib/64:/usr/lib/64/gss:/opt/site/lib -u