summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2019-09-21 20:08:04 +0200
committerJoonas Niilola <juippis@gentoo.org>2019-09-26 18:59:56 +0300
commitfc4c22fc0de9daba8b528c57a7f515a5da7bc332 (patch)
treede53fff1a0a197c38c91ee40cdc22a154a9dec3e /net-mail/vpopmail/files
parentacct-group/vpopmail: add new group (GID 89) (diff)
downloadgentoo-fc4c22fc0de9daba8b528c57a7f515a5da7bc332.tar.gz
gentoo-fc4c22fc0de9daba8b528c57a7f515a5da7bc332.tar.bz2
gentoo-fc4c22fc0de9daba8b528c57a7f515a5da7bc332.zip
net-mail/vpopmail: add some more patches
I have been running all but the strncat patch on my server for years now. The strncat patch was taken from upstream bugtracker and looks sane to me. While at it also package the upgrade instructions and let the user look them up there. Closes: https://bugs.gentoo.org/472420 Closes: https://bugs.gentoo.org/479432 Signed-off-by: Rolf Eike Beer <eike@sf-mail.de> Closes: https://github.com/gentoo/gentoo/pull/12990 Signed-off-by: Joonas Niilola <juippis@gentoo.org>
Diffstat (limited to 'net-mail/vpopmail/files')
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-clean-up-calling-maildrop.patch74
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-fix-S-tag-in-case-spamassassin-changed-the-file-size.patch96
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-fix-those-vfork-instances-that-do-more-than-exec.patch77
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-remove-unneeded-forward-declaration.patch24
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-strncat.patch166
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-unistd.patch9
-rw-r--r--net-mail/vpopmail/files/vpopmail-5.4.33-vdelivermail-add-static.patch34
7 files changed, 480 insertions, 0 deletions
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-clean-up-calling-maildrop.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-clean-up-calling-maildrop.patch
new file mode 100644
index 000000000000..c85c1b3150d2
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-clean-up-calling-maildrop.patch
@@ -0,0 +1,74 @@
+From 692e6f75056d93f0e9a024e3638259d5ba0fe398 Mon Sep 17 00:00:00 2001
+From: Rolf Eike Beer <eike@sf-mail.de>
+Date: Thu, 21 Aug 2014 17:55:27 +0200
+Subject: [PATCH 4/5] clean up calling maildrop
+
+-add const for arguments
+-do not prepend "| " to call for preline, run_command() will then just skip
+ over this anyway
+-put the buffer for the maildrop command in the most local scope
+---
+ vdelivermail.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/vpopmail-5.4.33/vdelivermail.c b/vpopmail-5.4.33/vdelivermail.c
+index be83a2a..2ad2e12 100644
+--- a/vdelivermail.c
++++ b/vdelivermail.c
+@@ -94,7 +94,7 @@ ssize_t get_message_size();
+ void deliver_mail(char *address, char *quota);
+ int check_forward_deliver(char *dir);
+ int is_looping( char *address );
+-void run_command(char *prog);
++static void run_command(const char *prog);
+ void checkuser(void);
+ void usernotfound(void);
+ int is_loop_match( const char *dt, const char *address);
+@@ -360,9 +360,6 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ long unsigned pid;
+ int pim[2];
+ #endif
+-#ifdef MAILDROP
+- char maildrop_command[256];
+-#endif
+
+ /* write the Return-Path: and Delivered-To: headers */
+ if (headerlen > 0) {
+@@ -409,7 +406,8 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ #ifdef MAILDROP
+ if ( limits.disable_maildrop==0 && vpw!=NULL &&
+ !(vpw->pw_gid & NO_MAILDROP) ) {
+- sprintf(maildrop_command, "| preline %s", MAILDROP_PROG);
++ char maildrop_command[256];
++ sprintf(maildrop_command, "preline %s", MAILDROP_PROG);
+ run_command(maildrop_command);
+ DeleteMail = 1;
+ return(0);
+@@ -896,13 +894,13 @@ void (*f)();
+ /* open a pipe to a command
+ * return the pid or -1 if error
+ */
+-void run_command(char *prog)
++void run_command(const char *prog)
+ {
+
+ #define MAX_ENV_BUFF 100
+
+ int child;
+- char *(args[4]);
++ const char *(args[4]);
+ int wstat;
+
+ while ((*prog == ' ') || (*prog == '|')) ++prog;
+@@ -915,7 +913,7 @@ void run_command(char *prog)
+ case 0:
+
+ putenv("SHELL=/bin/sh");
+- args[0] = "/bin/sh"; args[1] = "-c"; args[2] = prog; args[3] = 0;
++ args[0] = "/bin/sh"; args[1] = "-c"; args[2] = prog; args[3] = NULL;
+ sig_catch(SIGPIPE,SIG_DFL);
+ execv(*args,args);
+ printf("Unable to run /bin/sh: %d.", errno);
+--
+1.8.4.5
+
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-fix-S-tag-in-case-spamassassin-changed-the-file-size.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-fix-S-tag-in-case-spamassassin-changed-the-file-size.patch
new file mode 100644
index 000000000000..db22a6efde42
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-fix-S-tag-in-case-spamassassin-changed-the-file-size.patch
@@ -0,0 +1,96 @@
+From fd0a1034e3842ceb573851e62547b26a2b389263 Mon Sep 17 00:00:00 2001
+From: Rolf Eike Beer <eike@sf-mail.de>
+Date: Thu, 21 Aug 2014 18:48:52 +0200
+Subject: [PATCH 5/5] fix ,S= tag in case spamassassin changed the file size
+
+---
+ vdelivermail.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/vpopmail-5.4.33/vdelivermail.c b/vpopmail-5.4.33/vdelivermail.c
+index 2ad2e12..3631c3c 100644
+--- a/vdelivermail.c
++++ b/vdelivermail.c
+@@ -351,6 +351,12 @@ static pid_t qmail_inject_open(char *address)
+ return(pid);
+ }
+
++/**
++ * @returns if delivery worked
++ * @retval 0 message was delivered as is
++ * @retval 1 the file has changed the size during delivery
++ * @retval -1 error
++ */
+ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t headerlen, char *address)
+ {
+ char msgbuf[4096];
+@@ -360,6 +366,7 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ long unsigned pid;
+ int pim[2];
+ #endif
++ int has_changed_size = 0;
+
+ /* write the Return-Path: and Delivered-To: headers */
+ if (headerlen > 0) {
+@@ -399,6 +406,7 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ close(pim[1]);
+ dup2(pim[0], 0);
+ close(pim[0]);
++ has_changed_size = 1;
+ }
+ }
+ #endif
+@@ -431,7 +439,7 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ if ( write(write_fd, msgbuf, file_count) == -1 ) return -1;
+ }
+
+- return 0;
++ return has_changed_size;
+ }
+
+ void read_quota_from_maildir (const char *maildir, char *qbuf, size_t qlen)
+@@ -493,6 +501,7 @@ int deliver_to_maildir (
+ size_t headerlen;
+ int write_fd;
+ char quota[80];
++ int fdr;
+
+ headerlen = strlen (extra_headers);
+ msgsize += headerlen;
+@@ -518,7 +527,8 @@ int deliver_to_maildir (
+ }
+
+ local = 1;
+- if (fdcopy(write_fd, read_fd, extra_headers, headerlen, maildir_to_email(maildir)) != 0) {
++ fdr = fdcopy(write_fd, read_fd, extra_headers, headerlen, maildir_to_email(maildir));
++ if (fdr < 0) {
+ /* Did the write fail because we were over quota? */
+ if ( errno == EDQUOT ) {
+ close(write_fd);
+@@ -530,6 +540,14 @@ int deliver_to_maildir (
+ unlink (local_file_tmp);
+ return -2;
+ }
++ } else if (fdr == 1) {
++ /* the file has changed it's size during delivery, e.g. because
++ * SpamAssassin has written it's report to it. */
++ struct stat st;
++
++ if (fstat(write_fd, &st) == 0 && st.st_size != msgsize)
++ snprintf(local_file_new, sizeof(local_file_new), "%snew/%lu.%lu.%.32s,S=%lu",
++ maildir, tm, pid, hostname, (long unsigned) st.st_size);
+ }
+
+ /* completed write to tmp directory, now move it into the new directory */
+@@ -777,7 +795,7 @@ void deliver_mail(char *address, char *quota)
+ }
+
+ local = 0;
+- if (fdcopy (fdm, 0, DeliveredTo, strlen(DeliveredTo), address) != 0) {
++ if (fdcopy (fdm, 0, DeliveredTo, strlen(DeliveredTo), address) < 0) {
+ printf ("write to qmail-inject failed: %d\n", errno);
+ close(fdm);
+ waitpid(inject_pid,&child,0);
+--
+1.8.4.5
+
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-fix-those-vfork-instances-that-do-more-than-exec.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-fix-those-vfork-instances-that-do-more-than-exec.patch
new file mode 100644
index 000000000000..4f154fcc8d33
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-fix-those-vfork-instances-that-do-more-than-exec.patch
@@ -0,0 +1,77 @@
+From de58b5d05fdabf2f17d8a6ec3ef804b59a013242 Mon Sep 17 00:00:00 2001
+From: Rolf Eike Beer <eike@sf-mail.de>
+Date: Thu, 21 Aug 2014 17:36:36 +0200
+Subject: [PATCH 2/5] fix those vfork() instances that do more than exec*()
+
+---
+ vdelivermail.c | 4 ++--
+ vpopmail.c | 8 ++++----
+ vqmaillocal.c | 2 +-
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/vpopmail-5.4.33/vdelivermail.c b/vpopmail-5.4.33/vdelivermail.c
+index 241106e..be83a2a 100644
+--- a/vdelivermail.c
++++ b/vdelivermail.c
+@@ -330,7 +330,7 @@ static pid_t qmail_inject_open(char *address)
+
+ if ( pipe(pim) == -1) return 0;
+
+- switch(pid=vfork()){
++ switch(pid=fork()){
+ case -1:
+ close(pim[0]);
+ close(pim[1]);
+@@ -381,7 +381,7 @@ static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t
+ !(vpw->pw_gid & NO_SPAMASSASSIN) ) {
+
+ if (!pipe(pim)) {
+- pid = vfork();
++ pid = fork();
+ switch (pid) {
+ case -1:
+ close(pim[0]);
+diff --git a/vpopmail-5.4.33/vpopmail.c b/vpopmail-5.4.33/vpopmail.c
+index 5aaeb32..334a8ab 100644
+--- a/vpopmail.c
++++ b/vpopmail.c
+@@ -1473,9 +1473,9 @@ int update_newu()
+ {
+ int pid;
+
+- pid=vfork();
++ pid=fork();
+ if ( pid==0){
+- umask(022);
++ umask(022);
+ execl(QMAILNEWU,"qmail-newu", NULL);
+ exit(127);
+ } else {
+@@ -3366,9 +3366,9 @@ long unsigned tcprules_open()
+ /* create a pair of filedescriptors for our pipe */
+ if (pipe(pim) == -1) { return(-1);}
+
+- switch( pid=vfork()){
++ switch( pid=fork()){
+ case -1:
+- /* vfork error. close pipes and exit */
++ /* fork error. close pipes and exit */
+ close(pim[0]); close(pim[1]);
+ return(-1);
+ case 0:
+diff --git a/vpopmail-5.4.33/vqmaillocal.c b/vpopmail-5.4.33/vqmaillocal.c
+index 6d3068c..80efa24 100644
+--- a/vqmaillocal.c
++++ b/vqmaillocal.c
+@@ -359,7 +359,7 @@ long unsigned qmail_inject_open(char *address)
+
+ if ( pipe(pim) == -1) return(-1);
+
+- switch(pid=vfork()){
++ switch(pid=fork()){
+ case -1:
+ close(pim[0]);
+ close(pim[1]);
+--
+1.8.4.5
+
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-remove-unneeded-forward-declaration.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-remove-unneeded-forward-declaration.patch
new file mode 100644
index 000000000000..23ec43be0242
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-remove-unneeded-forward-declaration.patch
@@ -0,0 +1,24 @@
+From 32ce986d86695dd55d4c888c30fe62b910b99f17 Mon Sep 17 00:00:00 2001
+From: Rolf Eike Beer <eike@sf-mail.de>
+Date: Thu, 21 Aug 2014 17:45:28 +0200
+Subject: [PATCH 3/5] remove unneeded forward declaration
+
+---
+ vchkpw.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/vpopmail-5.4.33/vchkpw.c b/vpopmail-5.4.33/vchkpw.c
+index b1c8a5d..d7d4351 100644
+--- a/vchkpw.c
++++ b/vchkpw.c
+@@ -91,7 +91,6 @@ void login_system_user();
+ void read_user_pass();
+ void vlog(int verror, char *TheUser, char *TheDomain, char *ThePass, char *TheName, char *IpAddr, char *LogLine);
+ void vchkpw_exit(int err);
+-void run_command(char *prog);
+ int authcram( char *response, char *challenge, char *password);
+ int authapop( char *password, char *timestamp, char *clearpass);
+
+--
+1.8.4.5
+
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-strncat.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-strncat.patch
new file mode 100644
index 000000000000..f3c9c71b2993
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-strncat.patch
@@ -0,0 +1,166 @@
+https://sourceforge.net/p/vpopmail/patches/98/
+
+--- a/vpopmaild.c (revision 998)
++++ b/vpopmaild.c (working copy)
+@@ -1326,7 +1326,7 @@
+ }
+ }
+ snprintf(newpath, MAXPATH, "%s",myvpw->pw_dir);
+- strncat(newpath, &path[i], MAXPATH );
++ strncat(newpath, &path[i], MAXPATH-strlen(newpath)-1);
+ } else { /* may be domain name */
+ for(i=0;path[i]!='/'&&path[i]!=0&&i<256;++i) {
+ thedomain[i] = path[i];
+@@ -1337,7 +1337,7 @@
+ return(9);
+ }
+ snprintf(newpath, MAXPATH, "%s", thedir);
+- strncat(newpath, &path[i], MAXPATH );
++ strncat(newpath, &path[i], MAXPATH-strlen(newpath)-1);
+ }
+ }
+
+@@ -1459,23 +1459,23 @@
+ }
+ snprintf( WriteBuf, sizeof(WriteBuf), "%s", mydirent->d_name);
+ if ( S_ISREG(statbuf.st_mode ) ) {
+- strncat(WriteBuf," file", sizeof(WriteBuf));
++ strncat(WriteBuf," file", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISDIR(statbuf.st_mode ) ) {
+- strncat(WriteBuf," dir", sizeof(WriteBuf));
++ strncat(WriteBuf," dir", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISCHR(statbuf.st_mode ) ) {
+- strncat(WriteBuf," chardev", sizeof(WriteBuf));
++ strncat(WriteBuf," chardev", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISBLK(statbuf.st_mode ) ) {
+- strncat(WriteBuf," blkdev", sizeof(WriteBuf));
++ strncat(WriteBuf," blkdev", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISFIFO(statbuf.st_mode ) ) {
+- strncat(WriteBuf," fifo", sizeof(WriteBuf));
++ strncat(WriteBuf," fifo", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISLNK(statbuf.st_mode ) ) {
+- strncat(WriteBuf," link", sizeof(WriteBuf));
++ strncat(WriteBuf," link", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else if ( S_ISSOCK(statbuf.st_mode ) ) {
+- strncat(WriteBuf," sock", sizeof(WriteBuf));
++ strncat(WriteBuf," sock", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else {
+- strncat(WriteBuf," unknown", sizeof(WriteBuf));
++ strncat(WriteBuf," unknown", sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ }
+- strncat(WriteBuf,RET_CRLF, sizeof(WriteBuf));
++ strncat(WriteBuf,RET_CRLF, sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ wait_write();
+ }
+ if ( closedir(mydir) < 0 ) {
+@@ -1604,7 +1604,7 @@
+ while(fgets(tmpbuf,sizeof(tmpbuf),fs)!=NULL){
+ if ( strcmp(tmpbuf, "." RET_CRLF) == 0 || strcmp(tmpbuf, ".\n") == 0 ) {
+ snprintf(WriteBuf, sizeof(WriteBuf), "%s", ".");
+- strncat(WriteBuf, tmpbuf, sizeof(WriteBuf));
++ strncat(WriteBuf, tmpbuf, sizeof(WriteBuf)-strlen(WriteBuf)-1);
+ } else {
+ memcpy(WriteBuf,tmpbuf,sizeof(tmpbuf));
+ }
+--- a/vmysql.c (revision 998)
++++ b/vmysql.c (working copy)
+@@ -731,7 +731,7 @@
+ );
+
+ if ( sortit == 1 ) {
+- strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE);
++ strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE-strlen(SqlBufRead)-1);
+ }
+
+ if (res_read!=NULL) mysql_free_result(res_read_getall);
+--- a/vldap.c (revision 998)
++++ b/vldap.c (working copy)
+@@ -1022,7 +1022,7 @@
+
+ /* if we are lucky the domain is in the assign file */
+ if ( vget_assign(domain,dir_control_file,MAX_DIR_NAME,NULL,NULL)!=NULL ) {
+- strncat(dir_control_file, "/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file, "/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+
+ /* it isn't in the assign file so we have to get it from /etc/passwd */
+ } else {
+@@ -1041,7 +1041,7 @@
+ }
+
+ /* stick on the rest of the path */
+- strncat(dir_control_file, "/" DOMAINS_DIR "/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file, "/" DOMAINS_DIR "/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+ }
+ return(dir_control_file);
+ }
+@@ -1177,7 +1177,7 @@
+ char dir_control_file[MAX_DIR_NAME];
+
+ vget_assign(domain, dir_control_file, 156, NULL,NULL);
+- strncat(dir_control_file,"/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file,"/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+ return(unlink(dir_control_file));
+ }
+
+--- a/vpopmail.c (revision 998)
++++ b/vpopmail.c (working copy)
+@@ -1900,8 +1900,8 @@
+
+ // Copy the rest of the terms into the domain name
+ for(j=1;j<i;j++) {
+- strncat( domain, ".", MAX_BUFF );
+- strncat( domain, parts[j], MAX_BUFF );
++ strncat( domain, ".", MAX_BUFF-strlen(domain)-1);
++ strncat( domain, parts[j], MAX_BUFF-strlen(domain)-1);
+ }
+
+ }
+--- a/vcdb.c (revision 998)
++++ b/vcdb.c (working copy)
+@@ -271,7 +271,7 @@
+ }
+
+ strncpy(line,user,sizeof(line));
+- strncat(line,":",sizeof(line));
++ strncat(line,":",sizeof(line)-strlen(line)-1);
+ ptr = line;
+ while (*ptr != ':') { ptr++; }
+ ptr++;
+@@ -1055,7 +1055,7 @@
+ char dir_control_file[MAX_DIR_NAME];
+
+ vget_assign(domain, dir_control_file, 156, NULL,NULL);
+- strncat(dir_control_file,"/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file,"/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+ return(unlink(dir_control_file));
+ }
+
+@@ -1120,7 +1120,7 @@
+
+ /* if we are lucky the domain is in the assign file */
+ if ( vget_assign(domain,dir_control_file,MAX_DIR_NAME,NULL,NULL)!=NULL ) {
+- strncat(dir_control_file, "/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file, "/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+
+ /* it isn't in the assign file so we have to get it from /etc/passwd */
+ } else {
+@@ -1139,7 +1139,7 @@
+ }
+
+ /* stick on the rest of the path */
+- strncat(dir_control_file, "/" DOMAINS_DIR "/.dir-control", MAX_DIR_NAME);
++ strncat(dir_control_file, "/" DOMAINS_DIR "/.dir-control", MAX_DIR_NAME-strlen(dir_control_file)-1);
+ }
+ return(dir_control_file);
+ }
+--- a/vpgsql.c (revision 998)
++++ b/vpgsql.c (working copy)
+@@ -522,7 +522,7 @@
+ #endif
+ );
+ if ( sortit == 1 ) {
+- strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE);
++ strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE-strlen(SqlBufRead)-1);
+ }
+ if ( pgres ) { /* reset state if we had previous result */
+ PQclear(pgres); // clear previous result
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-unistd.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-unistd.patch
new file mode 100644
index 000000000000..803276f89ad5
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-unistd.patch
@@ -0,0 +1,9 @@
+--- vpopmail-5.4.33-orig/cdb/cdb_seek.c 2019-09-25 23:01:01.332000000 +0200
++++ vpopmail-5.4.33/cdb/cdb_seek.c 2019-09-25 23:03:04.112000000 +0200
+@@ -1,5 +1,6 @@
+ #include <sys/types.h>
+ #include <errno.h>
++#include <unistd.h>
+ #include "cdb.h"
+
+ #ifndef SEEK_SET
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-vdelivermail-add-static.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-vdelivermail-add-static.patch
new file mode 100644
index 000000000000..88306872b484
--- /dev/null
+++ b/net-mail/vpopmail/files/vpopmail-5.4.33-vdelivermail-add-static.patch
@@ -0,0 +1,34 @@
+From 31bef5aeeaf1e24eb40e84e41312dd6ae865ee03 Mon Sep 17 00:00:00 2001
+From: Rolf Eike Beer <eike@sf-mail.de>
+Date: Thu, 21 Aug 2014 17:34:27 +0200
+Subject: [PATCH 1/5] vdelivermail: add static
+
+---
+ vdelivermail.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/vpopmail-5.4.33/vdelivermail.c b/vpopmail-5.4.33/vdelivermail.c
+index d94129f..241106e 100644
+--- a/vdelivermail.c
++++ b/vdelivermail.c
+@@ -322,7 +322,7 @@ int process_valias(void)
+ #endif
+
+ /* Forks off qmail-inject. Returns PID of child, or 0 for failure. */
+-pid_t qmail_inject_open(char *address)
++static pid_t qmail_inject_open(char *address)
+ {
+ int pim[2];
+ pid_t pid;
+@@ -351,7 +351,7 @@ pid_t qmail_inject_open(char *address)
+ return(pid);
+ }
+
+-int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t headerlen, char *address)
++static int fdcopy (int write_fd, int read_fd, const char *extra_headers, size_t headerlen, char *address)
+ {
+ char msgbuf[4096];
+ ssize_t file_count;
+--
+1.8.4.5
+