1 # Copyright 1999-2019 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
6 inherit flag-o-matic pam systemd toolchain-funcs user
9 MY_SRC="${PN}-${MY_PV}"
10 MY_URI="ftp://ftp.porcupine.org/mirrors/postfix-release/official"
13 DESCRIPTION="A fast and secure drop-in replacement for sendmail"
14 HOMEPAGE="http://www.postfix.org/"
15 SRC_URI="${MY_URI}/${MY_SRC}.tar.gz"
17 LICENSE="|| ( IBM EPL-2.0 )"
19 KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86"
20 IUSE="+berkdb cdb dovecot-sasl +eai hardened ldap ldap-bind libressl lmdb memcached mbox mysql nis pam postgres sasl selinux sqlite ssl"
22 DEPEND=">=dev-libs/libpcre-3.4
24 berkdb? ( >=sys-libs/db-3.2:* )
25 cdb? ( || ( >=dev-db/tinycdb-0.76 >=dev-db/cdb-0.75-r4 ) )
26 eai? ( dev-libs/icu:= )
27 ldap? ( net-nds/openldap )
28 ldap-bind? ( net-nds/openldap[sasl] )
29 lmdb? ( >=dev-db/lmdb-0.9.11 )
30 mysql? ( dev-db/mysql-connector-c:0= )
31 nis? ( net-libs/libnsl )
33 postgres? ( dev-db/postgresql:* )
34 sasl? ( >=dev-libs/cyrus-sasl-2 )
35 sqlite? ( dev-db/sqlite:3 )
37 !libressl? ( dev-libs/openssl:0= )
38 libressl? ( >=dev-libs/libressl-2.9.1:0= )
42 memcached? ( net-misc/memcached )
54 !<mail-mta/ssmtp-2.64-r2
55 !>=mail-mta/ssmtp-2.64-r2[mta]
57 selinux? ( sec-policy/selinux-postfix )"
59 REQUIRED_USE="ldap-bind? ( ldap sasl )"
61 S="${WORKDIR}/${MY_SRC}"
64 "${FILESDIR}/${PN}-libressl-certkey.patch"
65 "${FILESDIR}/${PN}-libressl-server.patch"
69 # Add postfix, postdrop user/group (bug #77565)
71 enewgroup postdrop 208
72 enewuser postfix 207 -1 /var/spool/postfix postfix,mail
77 sed -i -e "/^#define ALIAS_DB_MAP/s|:/etc/aliases|:/etc/mail/aliases|" \
78 src/util/sys_defs.h || die "sed failed"
79 # change default paths to better comply with portage standard paths
80 sed -i -e "s:/usr/local/:/usr/:g" conf/master.cf || die "sed failed"
84 for name in CDB LDAP LMDB MYSQL PCRE PGSQL SDBM SQLITE
86 local AUXLIBS_${name}=""
89 # Make sure LDFLAGS get passed down to the executables.
90 local mycc="-DHAS_PCRE" mylibs="${LDFLAGS} -ldl"
91 AUXLIBS_PCRE="$(pcre-config --libs)"
93 use pam && mylibs="${mylibs} -lpam"
96 mycc="${mycc} -DHAS_LDAP"
97 AUXLIBS_LDAP="-lldap -llber"
101 mycc="${mycc} -DHAS_MYSQL $(mysql_config --include)"
102 AUXLIBS_MYSQL="$(mysql_config --libs)"
105 if use postgres; then
106 mycc="${mycc} -DHAS_PGSQL -I$(pg_config --includedir)"
107 AUXLIBS_PGSQL="-L$(pg_config --libdir) -lpq"
111 mycc="${mycc} -DHAS_SQLITE"
112 AUXLIBS_SQLITE="-lsqlite3 -lpthread"
116 mycc="${mycc} -DUSE_TLS"
117 mylibs="${mylibs} -lssl -lcrypto"
121 mycc="${mycc} -DHAS_LMDB"
122 AUXLIBS_LMDB="-llmdb -lpthread"
126 mycc="${mycc} -DNO_EAI"
129 # broken. and "in other words, not supported" by upstream.
130 # Use inet_protocols setting in main.cf
132 # mycc="${mycc} -DNO_IPV6"
136 if use dovecot-sasl; then
137 # Set dovecot as default.
138 mycc="${mycc} -DDEF_SASL_SERVER=\\\"dovecot\\\""
140 if use ldap-bind; then
141 mycc="${mycc} -DUSE_LDAP_SASL"
143 mycc="${mycc} -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl"
144 mylibs="${mylibs} -lsasl2"
145 elif use dovecot-sasl; then
146 mycc="${mycc} -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\\\"dovecot\\\""
150 mycc="${mycc} -DNO_NIS"
153 if ! use berkdb; then
154 mycc="${mycc} -DNO_DB"
156 # change default hash format from Berkeley DB to cdb
157 mycc="${mycc} -DDEF_DB_TYPE=\\\"cdb\\\""
162 mycc="${mycc} -DHAS_CDB -I/usr/include/cdb"
163 # Tinycdb is preferred.
164 if has_version dev-db/tinycdb ; then
165 einfo "Building with dev-db/tinycdb"
168 einfo "Building with dev-db/cdb"
169 CDB_PATH="/usr/$(get_libdir)"
170 for i in cdb.a alloc.a buffer.a unix.a byte.a ; do
171 AUXLIBS_CDB="${AUXLIBS_CDB} ${CDB_PATH}/${i}"
176 # Robin H. Johnson <robbat2@gentoo.org> 17/Nov/2006
177 # Fix because infra boxes hit 2Gb .db files that fail a 32-bit fstat signed check.
178 mycc="${mycc} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
181 # Workaround for bug #76512
182 if use hardened; then
183 [[ "$(gcc-version)" == "3.4" ]] && replace-flags -O? -Os
186 # Remove annoying C++ comment style warnings - bug #378099
187 append-flags -Wno-comment
189 sed -i -e "/^RANLIB/s/ranlib/$(tc-getRANLIB)/g" "${S}"/makedefs
190 sed -i -e "/^AR/s/ar/$(tc-getAR)/g" "${S}"/makedefs
192 emake makefiles shared=yes dynamicmaps=no pie=yes \
193 shlib_directory="/usr/$(get_libdir)/postfix/MAIL_VERSION" \
194 DEBUG="" CC="$(tc-getCC)" OPT="${CFLAGS}" CCARGS="${mycc}" AUXLIBS="${mylibs}" \
195 AUXLIBS_CDB="${AUXLIBS_CDB}" AUXLIBS_LDAP="${AUXLIBS_LDAP}" \
196 AUXLIBS_LMDB="${AUXLIBS_LMDB}" AUXLIBS_MYSQL="${AUXLIBS_MYSQL}" \
197 AUXLIBS_PCRE="${AUXLIBS_PCRE}" AUXLIBS_PGSQL="${AUXLIBS_PGSQL}" \
198 AUXLIBS_SQLITE="${AUXLIBS_SQLITE}"
202 LD_LIBRARY_PATH="${S}/lib" \
203 /bin/sh postfix-install \
205 install_root="${D}" \
206 config_directory="/etc/postfix" \
207 manpage_directory="/usr/share/man" \
208 command_directory="/usr/sbin" \
209 mailq_path="/usr/bin/mailq" \
210 newaliases_path="/usr/bin/newaliases" \
211 sendmail_path="/usr/sbin/sendmail" \
212 || die "postfix-install failed"
214 # Fix spool removal on upgrade
216 keepdir /var/spool/postfix
218 # Install rmail for UUCP, closes bug #19127
219 dobin auxiliary/rmail/rmail
221 # Provide another link for legacy FSH
222 dosym ../sbin/sendmail /usr/$(get_libdir)/sendmail
224 # Install qshape, posttls-finger and collate
225 dobin auxiliary/qshape/qshape.pl
226 doman man/man1/qshape.1
227 dobin bin/posttls-finger
228 doman man/man1/posttls-finger.1
229 dobin auxiliary/collate/collate.pl
230 newdoc auxiliary/collate/README README.collate
232 # Performance tuning tools and their manuals
233 dosbin bin/smtp-{source,sink} bin/qmqp-{source,sink}
234 doman man/man1/smtp-{source,sink}.1 man/man1/qmqp-{source,sink}.1
236 # Set proper permissions on required files/directories
237 keepdir /var/lib/postfix
238 fowners -R postfix:postfix /var/lib/postfix
239 fperms 0750 /var/lib/postfix
240 fowners root:postdrop /usr/sbin/post{drop,queue}
241 fperms 02755 /usr/sbin/post{drop,queue}
244 keepdir /etc/postfix/postfix-files.d
246 mypostconf="mail_spool_directory=/var/spool/mail"
248 mypostconf="home_mailbox=.maildir/"
250 LD_LIBRARY_PATH="${S}/lib" \
251 "${D}"/usr/sbin/postconf -c "${D}"/etc/postfix \
252 -e ${mypostconf} || die "postconf failed"
255 newins "${FILESDIR}"/smtp.pass saslpass
256 fperms 600 /etc/postfix/saslpass
258 newinitd "${FILESDIR}"/postfix.rc6.${RC_VER} postfix
259 # do not start mysql/postgres unnecessarily - bug #359913
260 use mysql || sed -i -e "s/mysql //" "${D}/etc/init.d/postfix"
261 use postgres || sed -i -e "s/postgresql //" "${D}/etc/init.d/postfix"
263 dodoc *README COMPATIBILITY HISTORY PORTING RELEASE_NOTES*
264 mv "${S}"/examples "${D}"/usr/share/doc/${PF}/
265 # postfix set-permissions expects uncompressed man files
266 docompress -x /usr/share/man
268 pamd_mimic_system smtp auth account
272 newins "${FILESDIR}"/smtp.sasl smtpd.conf
276 insinto /usr/include/postfix
279 if has_version mail-mta/postfix; then
280 # let the sysadmin decide when to change the compatibility_level
281 sed -i -e /^compatibility_level/"s/^/#/" "${D}"/etc/postfix/main.cf || die
284 systemd_dounit "${FILESDIR}/${PN}.service"
288 if has_version '<mail-mta/postfix-3.4'; then
290 elog "Postfix-3.4 introduces a new master.cf service 'postlog'"
291 elog "with type 'unix-dgram' that is used by the new postlogd(8) daemon."
292 elog "Before backing out to an older Postfix version, edit the master.cf"
293 elog "file and remove the postlog entry."
299 if [[ ! -e /etc/mail/aliases.db ]] ; then
301 ewarn "You must edit /etc/mail/aliases to suit your needs"
302 ewarn "and then run /usr/bin/newaliases. Postfix will not"
303 ewarn "work correctly without it."
307 # check and fix file permissions
308 "${EROOT}"/usr/sbin/postfix set-permissions
312 if "${EROOT}"/usr/sbin/postfix tls all-default-client; then
313 elog "To configure client side TLS settings:"
314 elog "${EROOT}"/usr/sbin/postfix tls enable-client
316 if "${EROOT}"/usr/sbin/postfix tls all-default-server; then
317 elog "To configure server side TLS settings:"
318 elog "${EROOT}"/usr/sbin/postfix tls enable-server