mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-01-06 02:17:34 -08:00
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:
parent
90eed188dc
commit
6248c40cc4
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
249
net-mail/vpopmail/vpopmail-5.4.33-r5.ebuild
Normal file
249
net-mail/vpopmail/vpopmail-5.4.33-r5.ebuild
Normal 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
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user