net-mail/vpopmail: add 2 more patches

Things I hit during testing.

Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Rolf Eike Beer 2019-10-26 19:30:11 +02:00 committed by Michał Górny
parent 90eed188dc
commit 6248c40cc4
No known key found for this signature in database
GPG Key ID: 639ADAE2329E240E
3 changed files with 612 additions and 0 deletions

View File

@ -0,0 +1,146 @@
From b3a21a4a6d7af3dc14417c89ec2ef2732a24939b Mon Sep 17 00:00:00 2001
From: Rolf Eike Beer <eike@sf-mail.de>
Date: Sat, 26 Oct 2019 18:14:13 +0200
Subject: [PATCH 1/2] check crypt() return value for NULL
Passing NULL to strcmp() would lead to a crash otherwise.
---
vcdb.c | 7 ++++++-
vchkpw.c | 11 +++++++++--
vldap.c | 8 +++++++-
vmysql.c | 8 +++++++-
vpgsql.c | 8 +++++++-
vsybase.c | 8 +++++++-
6 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/vcdb.c b/vcdb.c
index 55c1cb5..1bf9cd8 100644
--- a/vcdb.c
+++ b/vcdb.c
@@ -1160,7 +1160,12 @@ void vcdb_strip_char( char *instr )
int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw)
{
+ const char *c;
if ( vpw == NULL ) return(-1);
- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));
+ c = crypt(clear_pass,vpw->pw_passwd);
+
+ if ( c == NULL ) return(-1);
+
+ return(strcmp(c,vpw->pw_passwd));
}
diff --git a/vchkpw.c b/vchkpw.c
index d7d4351..a7c4b9e 100644
--- a/vchkpw.c
+++ b/vchkpw.c
@@ -607,6 +607,7 @@ void login_system_user()
struct spwd *spw;
#endif
struct passwd *pw;
+ const char *c;
if ((pw=getpwnam(TheUser)) == NULL ) {
snprintf(LogLine, sizeof(LogLine), "%s: system user not found %s:%s",
@@ -626,9 +627,15 @@ void login_system_user()
vchkpw_exit(22);
}
- if ( strcmp(crypt(ThePass,spw->sp_pwdp),spw->sp_pwdp) != 0 ) {
+ c = crypt(ThePass,spw->sp_pwdp);
+
+ if ( c == NULL ) vchkpw_exit(24);
+ if ( strcmp(c,spw->sp_pwdp) != 0 ) {
#else
- if ( strcmp(crypt(ThePass,pw->pw_passwd),pw->pw_passwd) != 0 ) {
+ c = crypt(ThePass,pw->pw_passwd);
+
+ if ( c == NULL ) vchkpw_exit(24);
+ if ( strcmp(c,pw->pw_passwd) != 0 ) {
#endif
if (ENABLE_LOGGING==1||ENABLE_LOGGING==2) {
snprintf(LogLine, sizeof(LogLine), "%s: system password fail %s:%s",
diff --git a/vldap.c b/vldap.c
index 75329ef..5fcce99 100644
--- a/vldap.c
+++ b/vldap.c
@@ -1495,10 +1495,16 @@ void *safe_malloc (size_t siz) {
/***************************************************************************/
int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) {
+ const char *c;
+
if ( vpw == NULL )
return(-1);
- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));
+ c = crypt(clear_pass,vpw->pw_passwd);
+
+ if ( c == NULL ) return(-1);
+
+ return(strcmp(c,vpw->pw_passwd));
}
/***************************************************************************/
diff --git a/vmysql.c b/vmysql.c
index 4215a39..c5173d9 100644
--- a/vmysql.c
+++ b/vmysql.c
@@ -1862,7 +1862,13 @@ int vdel_limits(const char *domain)
/************************************************************************/
int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw)
{
+ const char *c;
+
if ( vpw == NULL ) return(-1);
- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));
+ c = crypt(clear_pass,vpw->pw_passwd);
+
+ if ( c == NULL ) return(-1);
+
+ return(strcmp(c,vpw->pw_passwd));
}
diff --git a/vpgsql.c b/vpgsql.c
index c55b9e2..b5dd40b 100644
--- a/vpgsql.c
+++ b/vpgsql.c
@@ -1667,8 +1667,14 @@ void vcreate_vlog_table()
int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw)
{
+ const char *c;
+
if ( vpw == NULL ) return(-1);
- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));
+ c = crypt(clear_pass,vpw->pw_passwd);
+
+ if ( c == NULL ) return(-1);
+
+ return(strcmp(c,vpw->pw_passwd));
}
diff --git a/vsybase.c b/vsybase.c
index c6d7234..26f7447 100644
--- a/vsybase.c
+++ b/vsybase.c
@@ -640,7 +640,13 @@ int vshow_ip_map( int first, char *ip, char *domain);
int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw)
{
+ const char *c;
+
if ( vpw == NULL ) return(-1);
- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));
+ c = crypt(clear_pass,vpw->pw_passwd);
+
+ if ( c == NULL ) return(-1);
+
+ return(strcmp(c,vpw->pw_passwd));
}
--
2.16.4

View File

@ -0,0 +1,217 @@
From 8ebcfc44379708521c41193057bb1549a3c1a2eb Mon Sep 17 00:00:00 2001
From: Rolf Eike Beer <eike@sf-mail.de>
Date: Sat, 26 Oct 2019 18:25:12 +0200
Subject: [PATCH 2/2] use proper printf format strings
---
maildirquota.c | 4 ++--
vlimits.c | 8 ++++----
vlistlib.c | 2 +-
vmoddomlimits.c | 8 ++++----
vpopmail.c | 17 +++++++++--------
vpopmaild.c | 20 ++++++++++----------
vusagec.c | 2 +-
7 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/maildirquota.c b/maildirquota.c
index 1c3dd44..11a0ce3 100644
--- a/maildirquota.c
+++ b/maildirquota.c
@@ -400,7 +400,7 @@ static int maildirsize_read(const char *filename, /* The filename */
first=0;
continue;
}
- sscanf(q, "%llu %llu", &n, &c);
+ sscanf(q, "%" PRIu64 " %" PRIu64 "", &n, &c);
*sizeptr += n;
*cntptr += c;
++ *nlines;
@@ -806,7 +806,7 @@ int n;
niov=2;
}
- sprintf(u.buf, "%llu %llu\n", maildirsize_size, maildirsize_cnt);
+ sprintf(u.buf, "%" PRIu64 " %" PRIu64 "\n", maildirsize_size, maildirsize_cnt);
iov[niov].iov_base=u.buf;
iov[niov].iov_len=strlen(u.buf);
diff --git a/vlimits.c b/vlimits.c
index af336d2..c4d76ba 100644
--- a/vlimits.c
+++ b/vlimits.c
@@ -480,10 +480,10 @@ int vlimits_write_limits_file(const char *dir, const struct vlimits *limits)
fprintf(fs, "maxforwards: %d\n", limits->maxforwards);
fprintf(fs, "maxautoresponders: %d\n", limits->maxautoresponders);
fprintf(fs, "maxmailinglists: %d\n", limits->maxmailinglists);
- fprintf(fs, "quota: %llu\n", limits->diskquota);
- fprintf(fs, "maxmsgcount: %llu\n", limits->maxmsgcount);
- fprintf(fs, "default_quota: %llu\n", limits->defaultquota);
- fprintf(fs, "default_maxmsgcount: %llu\n", limits->defaultmaxmsgcount);
+ fprintf(fs, "quota: %" PRIu64 "\n", limits->diskquota);
+ fprintf(fs, "maxmsgcount: %" PRIu64 "\n", limits->maxmsgcount);
+ fprintf(fs, "default_quota: %" PRIu64 "\n", limits->defaultquota);
+ fprintf(fs, "default_maxmsgcount: %" PRIu64 "\n", limits->defaultmaxmsgcount);
if (limits->disable_pop) fprintf(fs, "disable_pop\n");
if (limits->disable_imap) fprintf(fs, "disable_imap\n");
if (limits->disable_dialup) fprintf(fs, "disable_dialup\n");
diff --git a/vlistlib.c b/vlistlib.c
index 110a93e..cbb8242 100644
--- a/vlistlib.c
+++ b/vlistlib.c
@@ -488,7 +488,7 @@ void ezmlm_decode( listInfoType *LI ) {
if( (fs=fopen(TmpBuf, "r")) !=NULL ) {
if(fgets(TmpBuf2, sizeof(TmpBuf2), fs)) {
Tmp = strtok( TmpBuf2, ":" );
- printf( " First Token: %s Len: %d\n", Tmp, strlen( Tmp ));
+ printf( " First Token: %s Len: %zu\n", Tmp, strlen( Tmp ));
if( NULL != Tmp ) {
for(i=0; i<strlen(Tmp); i++) LI->SQLHost[i] = Tmp[i];
LI->SQLHost[i] = (char) 0;
diff --git a/vmoddomlimits.c b/vmoddomlimits.c
index cff906a..7a9c8b8 100644
--- a/vmoddomlimits.c
+++ b/vmoddomlimits.c
@@ -207,10 +207,10 @@ int main(int argc, char *argv[])
printf ((limits.perm_defaultquota & VLIMIT_DISABLE_DELETE ? "DENY_DELETE " :"ALLOW_DELETE ") );
printf("\n");
- printf("Domain Quota: %llu MB\n", limits.diskquota);
- printf("Default User Quota: %llu bytes\n", limits.defaultquota);
- printf("Max Domain Messages: %llu\n", limits.maxmsgcount);
- printf("Default Max Messages per User: %llu\n", limits.defaultmaxmsgcount);
+ printf("Domain Quota: %" PRIu64 " MB\n", limits.diskquota);
+ printf("Default User Quota: %" PRIu64 " bytes\n", limits.defaultquota);
+ printf("Max Domain Messages: %" PRIu64 "\n", limits.maxmsgcount);
+ printf("Default Max Messages per User: %" PRIu64 "\n", limits.defaultmaxmsgcount);
return(vexit(0));
}
diff --git a/vpopmail.c b/vpopmail.c
index 3b6a3e5..c389c7c 100644
--- a/vpopmail.c
+++ b/vpopmail.c
@@ -31,6 +31,7 @@
#include <fcntl.h>
#include <time.h>
#include <dirent.h>
+#include <inttypes.h>
#include <pwd.h>
#include "config.h"
#ifdef HAVE_ERR_H
@@ -737,13 +738,13 @@ int vadduser( char *username, char *domain, char *password, char *gecos,
if (limits.defaultquota > 0) {
if (limits.defaultmaxmsgcount > 0)
- snprintf (quota, sizeof(quota), "%lluS,%lluC", limits.defaultquota,
+ snprintf (quota, sizeof(quota), "%" PRIu64 "S,%" PRIu64 "C", limits.defaultquota,
limits.defaultmaxmsgcount);
else
- snprintf (quota, sizeof(quota), "%lluS", limits.defaultquota);
+ snprintf (quota, sizeof(quota), "%" PRIu64 "S", limits.defaultquota);
} else {
if (limits.defaultmaxmsgcount > 0)
- snprintf (quota, sizeof(quota), "%lluC", limits.defaultmaxmsgcount);
+ snprintf (quota, sizeof(quota), "%" PRIu64 "C", limits.defaultmaxmsgcount);
else
strcpy (quota, "NOQUOTA");
}
@@ -3822,11 +3823,11 @@ static char tempquota[128];
if (quota_count == 0)
if (quota_size == 0) strcpy (tempquota, ""); /* invalid quota */
- else sprintf (tempquota, "%lluS", quota_size);
+ else sprintf (tempquota, "%" PRIu64 "S", quota_size);
else if (quota_size == 0)
- sprintf (tempquota, "%lluC", quota_count);
+ sprintf (tempquota, "%" PRIu64 "C", quota_count);
else
- sprintf (tempquota, "%lluS,%lluC", quota_size, quota_count);
+ sprintf (tempquota, "%" PRIu64 "S,%" PRIu64 "C", quota_size, quota_count);
return tempquota;
}
@@ -4050,8 +4051,8 @@ int qnprintf (char *buffer, size_t size, const char *format, ...)
snprintf (n, sizeof(n), "%u", va_arg (ap, unsigned int));
break;
- case 'S':
- snprintf(n, sizeof(n), "%llu", va_arg(ap, storage_t));
+ case 'S':
+ snprintf(n, sizeof(n), "%" PRIu64, va_arg(ap, storage_t));
break;
case 'l':
diff --git a/vpopmaild.c b/vpopmaild.c
index f257a52..9cf2981 100644
--- a/vpopmaild.c
+++ b/vpopmaild.c
@@ -2280,13 +2280,13 @@ int get_limits()
mylimits.maxautoresponders); wait_write();
snprintf(WriteBuf,sizeof(WriteBuf), "max_mailinglists %d" RET_CRLF,
mylimits.maxmailinglists); wait_write();
- snprintf(WriteBuf,sizeof(WriteBuf), "disk_quota %llu" RET_CRLF,
+ snprintf(WriteBuf,sizeof(WriteBuf), "disk_quota %" PRIu64 RET_CRLF,
mylimits.diskquota); wait_write();
- snprintf(WriteBuf,sizeof(WriteBuf), "max_msgcount %llu" RET_CRLF,
+ snprintf(WriteBuf,sizeof(WriteBuf), "max_msgcount %" PRIu64 RET_CRLF,
mylimits.maxmsgcount); wait_write();
- snprintf(WriteBuf,sizeof(WriteBuf), "default_quota %llu" RET_CRLF,
+ snprintf(WriteBuf,sizeof(WriteBuf), "default_quota %" PRIu64 RET_CRLF,
mylimits.defaultquota); wait_write();
- snprintf(WriteBuf,sizeof(WriteBuf), "default_maxmsgcount %llu" RET_CRLF,
+ snprintf(WriteBuf,sizeof(WriteBuf), "default_maxmsgcount %" PRIu64 RET_CRLF,
mylimits.defaultmaxmsgcount); wait_write();
if (mylimits.disable_pop)
@@ -2625,9 +2625,9 @@ int get_user_size()
snprintf(WriteBuf, sizeof(WriteBuf), "%s", RET_OK_MORE);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, bytes);
+ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, bytes);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, cnt);
+ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, cnt);
wait_write();
snprintf(WriteBuf, sizeof(WriteBuf), "%s", "." RET_CRLF);
@@ -2680,9 +2680,9 @@ int get_domain_size()
} else {
snprintf(WriteBuf, sizeof(WriteBuf), "user %s@%s" RET_CRLF, tmpvpw->pw_name, domain);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, bytes);
+ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, bytes);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, cnt);
+ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, cnt);
wait_write();
totalbytes += (unsigned long)bytes;
totalcnt += (unsigned int)cnt;
@@ -2691,9 +2691,9 @@ int get_domain_size()
snprintf(WriteBuf, sizeof(WriteBuf), "domain %s" RET_CRLF, domain);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, totalbytes);
+ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, totalbytes);
wait_write();
- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, totalcnt);
+ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, totalcnt);
wait_write();
snprintf(WriteBuf, sizeof(WriteBuf), "%s", "." RET_CRLF);
diff --git a/vusagec.c b/vusagec.c
index c32c2fe..5cc6dda 100644
--- a/vusagec.c
+++ b/vusagec.c
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
if (uusage == -1)
printf("%s: No data available\n", argv[i]);
else
- printf("%s: %llu byte(s) in %llu file(s)\n", *(argv[i]) == '@' ? (argv[i] + 1) : argv[i], uusage, musage);
+ printf("%s: %" PRIu64 " byte(s) in %" PRIu64 " file(s)\n", *(argv[i]) == '@' ? (argv[i] + 1) : argv[i], uusage, musage);
}
client_close(handle);
--
2.16.4

View File

@ -0,0 +1,249 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit autotools fixheadtails qmail
HOMEPAGE="http://www.inter7.com/index.php?page=vpopmail"
DESCRIPTION="Collection of programs to manage virtual email on Qmail servers"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86"
IUSE="clearpasswd ipalias maildrop mysql postgres spamassassin"
REQUIRED_USE="mysql? ( !postgres )"
DEPEND="
acct-group/vpopmail
virtual/qmail
maildrop? ( mail-filter/maildrop )
mysql? ( dev-db/mysql-connector-c:0= )
postgres? ( dev-db/postgresql:=[server] )
spamassassin? ( mail-filter/spamassassin )"
RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}"/${PN}-5.4.9-access.violation.patch
"${FILESDIR}"/${PN}-lazy.patch
"${FILESDIR}"/${PN}-vpgsql.patch
"${FILESDIR}"/${PN}-double-free.patch
"${FILESDIR}"/${PN}-5.4.33-vdelivermail-add-static.patch
"${FILESDIR}"/${PN}-5.4.33-fix-those-vfork-instances-that-do-more-than-exec.patch
"${FILESDIR}"/${PN}-5.4.33-remove-unneeded-forward-declaration.patch
"${FILESDIR}"/${PN}-5.4.33-clean-up-calling-maildrop.patch
"${FILESDIR}"/${PN}-5.4.33-fix-S-tag-in-case-spamassassin-changed-the-file-size.patch
"${FILESDIR}"/${PN}-5.4.33-strncat.patch
"${FILESDIR}"/${PN}-5.4.33-unistd.patch
"${FILESDIR}"/${PN}-5.4.33-check-crypt-return-value-for-NULL.patch
"${FILESDIR}"/${PN}-5.4.33-use-proper-printf-format-strings.patch
)
DOCS=(
ChangeLog
doc/.
)
HTML_DOCS=(
doc_html/.
man_html/.
)
VPOP_HOME="/var/vpopmail"
pkg_setup() {
upgradewarning
}
src_prepare() {
default
echo 'install-recursive: install-exec-am' \
>>"${S}"/Makefile.am || die
# fix maildir paths
sed -i -e 's|Maildir|.maildir|g' \
vchkpw.c vconvert.c vdelivermail.c \
vpopbull.c vpopmail.c vqmaillocal.c \
vuserinfo.c maildirquota.c || die
# remove vpopmail advertisement
sed -i -e '/printf.*vpopmail/s:vpopmail (:(:' \
vdelivermail.c vpopbull.c vqmaillocal.c || die
# automake/autoconf
mv "${S}"/configure.{in,ac} || die
sed -i -e 's,AM_CONFIG_HEADER,AC_CONFIG_HEADERS,g' \
configure.ac || die
# _FORTIFY_SOURCE
sed -i \
-e 's/\(snprintf(\s*\(LI->[a-zA-Z_]\+\),\s*\)[a-zA-Z_]\+,/\1 sizeof(\2),/' \
vlistlib.c || die
eautoreconf
ht_fix_file cdb/Makefile
}
src_configure() {
local -a authopts
if use mysql; then
incdir=$(mysql_config --variable=pkgincludedir || die)
libdir=$(mysql_config --variable=pkglibdir || die)
authopts+=( "--enable-auth-module=mysql"
"--enable-incdir=${incdir}"
"--enable-libdir=${libdir}"
"--enable-sql-logging"
"--enable-valias"
"--disable-mysql-replication"
"--enable-mysql-limits"
)
elif use postgres; then
libdir=$(pg_config --libdir || die)
incdir=$(pg_config --pkgincludedir || die)
authopts+=( "--enable-auth-module=pgsql"
"--enable-incdir=${incdir}"
"--enable-libdir=${libdir}"
"--enable-sql-logging"
"--enable-valias"
)
else
authopts+=( "--enable-auth-module=cdb" )
fi
econf ${authopts[@]} \
--sysconfdir=${VPOP_HOME}/etc \
--enable-non-root-build \
--enable-qmaildir=${QMAIL_HOME} \
--enable-qmail-newu=${QMAIL_HOME}/bin/qmail-newu \
--enable-qmail-inject=${QMAIL_HOME}/bin/qmail-inject \
--enable-qmail-newmrh=${QMAIL_HOME}/bin/qmail-newmrh \
--enable-vpopuser=vpopmail \
--enable-vpopgroup=vpopmail \
--enable-many-domains \
--enable-file-locking \
--enable-file-sync \
--enable-md5-passwords \
--enable-logging \
--enable-auth-logging \
--enable-log-name=vpopmail \
--enable-qmail-ext \
--disable-tcpserver-file \
--disable-roaming-users \
$(use_enable ipalias ip-alias-domains) \
$(use_enable clearpasswd clear-passwd) \
$(use_enable maildrop) \
$(use_enable maildrop maildrop-prog /usr/bin/maildrop) \
$(use_enable spamassassin)
}
src_install() {
emake DESTDIR="${D}" install
keepdir "${VPOP_HOME}"/domains
# install helper script for maildir conversion
into "${VPOP_HOME}"
dobin "${FILESDIR}"/vpopmail-Maildir-dotmaildir-fix.sh
into /usr
mv doc/doc_html/ doc/man_html/ . || die
einstalldocs
rm -r "${D}/${VPOP_HOME}"/doc || die
# create /etc/vpopmail.conf
if use mysql; then
insinto /etc
newins "${D}${VPOP_HOME}"/etc/vpopmail.mysql vpopmail.conf
dosym ../../etc/vpopmail.conf "${VPOP_HOME}"/etc/vpopmail.mysql
sed 's/^[^#]/# &/' -i "${D}"/etc/vpopmail.conf || die
echo '# Read-only DB' >> "${D}"/etc/vpopmail.conf || die
echo 'localhost|0|vpopmail|secret|vpopmail' >> "${D}"/etc/vpopmail.conf || die
echo '# Write DB' >> "${D}"/etc/vpopmail.conf || die
echo 'localhost|0|vpopmail|secret|vpopmail' >> "${D}"/etc/vpopmail.conf || die
# lock down perms
fperms 640 /etc/vpopmail.conf
fowners root:vpopmail /etc/vpopmail.conf
fi
insinto "${VPOP_HOME}"/etc
doins vusagec.conf
dosym .."${VPOP_HOME}"/etc/vusagec.conf /etc/vusagec.conf
sed -i 's/Disable = False;/Disable = True;/g' "${D}${VPOP_HOME}"/etc/vusagec.conf || die
einfo "Installing env.d entry"
doenvd "${FILESDIR}"/99vpopmail
einfo "Locking down vpopmail permissions"
fowners -R root:0 "${VPOP_HOME}"/{bin,etc,include}
fowners root:vpopmail "${VPOP_HOME}"/bin/vchkpw
fperms 4711 "${VPOP_HOME}"/bin/vchkpw
}
pkg_postinst() {
if use mysql ; then
elog
elog "You have 'mysql' turned on in your USE"
elog "Vpopmail needs a VALID MySQL USER. Let's call it 'vpopmail'"
elog "You MUST add it and then specify its passwd in the /etc/vpopmail.conf file"
elog
elog "First log into mysql as your mysql root user and pass. Then:"
elog "> create database vpopmail;"
elog "> use mysql;"
elog "> grant select, insert, update, delete, create, drop on vpopmail.* to"
elog " vpopmail@localhost identified by 'your password';"
elog "> flush privileges;"
elog
elog "If you have problems with vpopmail not accepting mail properly,"
elog "please ensure that /etc/vpopmail.conf is chmod 640 and"
elog "owned by root:vpopmail"
elog
fi
# do this for good measure
if [[ -e /etc/vpopmail.conf ]]; then
chmod 640 /etc/vpopmail.conf || die
chown root:vpopmail /etc/vpopmail.conf || die
fi
upgradewarning
}
pkg_postrm() {
elog "The vpopmail DATA will NOT be removed automatically."
elog "You can delete them manually by removing the ${VPOP_HOME} directory."
}
upgradewarning() {
if has_version "<=net-mail/vpopmail-5.2.1-r8"; then
ewarn
ewarn "Massive important warning if you are upgrading to 5.2.1-r8 or older"
ewarn "The internal structure of the mail storage has changed for"
ewarn "consistancy with the rest of Gentoo! Please review and utilize the "
ewarn "script at ${VPOP_HOME}/bin/vpopmail-Maildir-dotmaildir-fix.sh"
ewarn "to upgrade your system! (It can do conversions both ways)."
ewarn "You should be able to run it right away without any changes."
ewarn
fi
elog
elog "Use of vpopmail's tcp.smtp[.cdb] is also deprecated now, consider"
elog "using net-mail/relay-ctrl instead."
elog
if use mysql; then
if has_version "<=net-mail/vpopmail-5.4.17"; then
elog
elog "If you are upgrading from 5.4.17 or older, you have to fix your"
elog "MySQL tables, please see the UPGRADE file in the documentation!"
elog
fi
fi
ewarn
ewarn "Newer versions of vpopmail contain a quota daemon called vusaged."
ewarn "This ebuild DOES NOT INSTALL vusaged and has therefore disabled"
ewarn "its usage in ${VPOP_HOME}/etc/vusagec.conf. DO NOT ENABLE!"
ewarn "Otherwise mail delivery WILL BREAK"
ewarn
}