From 994a243dc1a496737f0680c91c7c0b902b4ab468e76c2be78ee2907b1b57ee23 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 22 Dec 2010 17:52:42 +0000 Subject: [PATCH] Accepting request 55672 from home:computersalat:devel:mail OBS-URL: https://build.opensuse.org/request/show/55672 OBS-URL: https://build.opensuse.org/package/show/server:mail/postfix?expand=0&rev=54 --- postfix-2.6.1-vda-ng-64bit.patch | 225 ------------------ ...in.cf.patch => postfix-2.7.1-main.cf.patch | 18 +- ....1-vda-ng.patch => postfix-vda-2.7.1.patch | 220 +++++++++-------- postfix.changes | 11 + postfix.spec | 8 +- 5 files changed, 149 insertions(+), 333 deletions(-) delete mode 100644 postfix-2.6.1-vda-ng-64bit.patch rename postfix-2.2.9-main.cf.patch => postfix-2.7.1-main.cf.patch (66%) rename postfix-2.6.1-vda-ng.patch => postfix-vda-2.7.1.patch (90%) diff --git a/postfix-2.6.1-vda-ng-64bit.patch b/postfix-2.6.1-vda-ng-64bit.patch deleted file mode 100644 index 9d9d58c..0000000 --- a/postfix-2.6.1-vda-ng-64bit.patch +++ /dev/null @@ -1,225 +0,0 @@ -diff -uNr postfix-2.5.6-vda-ng.orig/src/util/vbuf_print.c postfix-2.5.6/src/util/vbuf_print.c ---- postfix-2.5.6-vda-ng.orig/src/util/vbuf_print.c 2006-12-10 18:13:07.000000000 +0100 -+++ postfix-2.5.6/src/util/vbuf_print.c 2008-08-25 12:20:41.032890016 +0200 -@@ -193,8 +193,13 @@ - msg_warn("%s: bad precision %d in %.50s", myname, prec, format); - prec = 0; - } -- if ((long_flag = (*cp == 'l')) != 0)/* long whatever */ -+ if ((long_flag = (*cp == 'l')) != 0) { /* long whatever */ - VSTRING_ADDCH(fmt, *cp++); -+ if (*cp == 'l') { /* we have long long param */ -+ long_flag = 2; -+ VSTRING_ADDCH(fmt, *cp++); -+ } -+ } - if (*cp == 0) /* premature end, punt */ - break; - VSTRING_ADDCH(fmt, *cp); /* type (checked below) */ -@@ -226,8 +231,10 @@ - case 'X': - if (VBUF_SPACE(bp, (width > prec ? width : prec) + INT_SPACE)) - return (bp); -- if (long_flag) -+ if (long_flag == 1) - sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, long)); -+ else if (long_flag == 2) -+ sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, long long)); - else - sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, int)); - VBUF_SKIP(bp); -diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/mailbox.c postfix-2.5.6/src/virtual/mailbox.c ---- postfix-2.5.6-vda-ng.orig/src/virtual/mailbox.c 2008-08-25 11:57:48.000000000 +0200 -+++ postfix-2.5.6/src/virtual/mailbox.c 2008-08-25 12:20:41.032890016 +0200 -@@ -120,7 +120,6 @@ - myname, usr_attr.mailbox, OFF_T_MAX); - } - else { -- /* Invalid limit size (negative). Use default virtual_mailbox_limit. */ - set_file_limit(var_virt_mailbox_limit); - status = NO; - } -diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/maildir.c ---- postfix-2.5.6-vda-ng.orig/src/virtual/maildir.c 2008-08-25 11:57:48.000000000 +0200 -+++ postfix-2.5.6/src/virtual/maildir.c 2008-08-25 12:20:41.033889864 +0200 -@@ -65,6 +65,8 @@ - - /* Patch library. */ - -+#include -+#include - #include /* opendir(3), stat(2) */ - #include /* stat(2) */ - #include /* opendir(3) */ -@@ -98,14 +100,14 @@ - * Returns the size of all mails as read from maildirsize, - * zero if it couldn't read the file. - */ --static long read_maildirsize(char *dirname, long *countptr) -+static uint64_t read_maildirsize(char *dirname, uint64_t *countptr) - { - struct stat statbuf; - VSTRING *sizefilename = vstring_alloc(1024); - VSTREAM *sizefile; - char *p; - int len, first; -- long sum = 0, count = 0; -+ uint64_t sum = 0, count = 0; - - vstring_sprintf(sizefilename, "%s/%s", dirname, "maildirsize"); - -@@ -128,7 +130,7 @@ - first = 1; - - while (*p) { -- long n = 0, c = 0; -+ uint64_t n = 0, c = 0; - char *q = p; - - while (*p) { -@@ -143,7 +145,7 @@ - continue; - } - -- if(sscanf(q, "%ld %ld", &n, &c) == 2) { -+ if(sscanf(q, "%llu %llu", &n, &c) == 2) { - sum += n; - count += c; - } -@@ -179,7 +181,7 @@ - * Returns the size given in ",S=" in the filename, - * zero if it cannot find ",S=" in the filename. - */ --static long maildir_parsequota(const char *n) -+static uint64_t maildir_parsequota(const char *n) - { - const char *o; - int yes = 0; -@@ -204,7 +206,7 @@ - } - - if (yes) { -- long s = 0; -+ uint64_t s = 0; - - while (*o >= '0' && *o <= '9') - s = s*10 + (*o++ - '0'); -@@ -231,17 +233,17 @@ - * Returns the sum of the sizes of all measurable files, - * zero if the directory could not be opened. - */ --static long check_dir_size(char *dirname, long *countptr) -+static uint64_t check_dir_size(char *dirname, uint64_t *countptr) - { - char *myname = "check_dir_size"; - DIR *dir; -- long sum = 0; -+ uint64_t sum = 0; - struct dirent *ent; - struct stat statbuf; - - if (!var_virt_mailbox_limit_inbox && var_virt_maildir_extended && (sum = read_maildirsize(dirname, countptr))) { - if (msg_verbose) -- msg_info("%s: maildirsize used: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr); -+ msg_info("%s: maildirsize used: dir=%s sum=%llu count=%llu", myname, dirname, sum, *countptr); - return sum; - } - -@@ -262,7 +264,7 @@ - - while ((ent = readdir(dir)) != NULL) { - char *name = ent->d_name; -- long tmpsum = 0; -+ uint64_t tmpsum = 0; - VSTRING *buffer; - - if (var_virt_trash_count) { -@@ -325,7 +327,7 @@ - closedir(dir); - - if (msg_verbose) -- msg_info("%s: full scan done: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr); -+ msg_info("%s: full scan done: dir=%s sum=%llu count=%llu", myname, dirname, sum, *countptr); - - return sum; - } -@@ -443,9 +445,9 @@ - char *sizefilename = (char *) 0; /* Maildirsize file name. */ - VSTRING *filequota; /* Quota setting from the maildirsize file. */ - VSTREAM *sizefile; /* Maildirsize file handle. */ -- long n = 0; /* Limit in long integer format. */ -- long saved_count = 0; /* The total number of files. */ -- long saved_size = 0; /* The total quota of all files. */ -+ uint64_t n = 0; /* Limit in long integer format. */ -+ uint64_t saved_count = 0; /* The total number of files. */ -+ uint64_t saved_size = 0; /* The total quota of all files. */ - struct stat mail_stat; /* To check the size of the mail to be written. */ - struct stat sizefile_stat; /* To check the size of the maildirsize file. */ - time_t tm; /* To check the age of the maildirsize file. */ -@@ -520,7 +522,8 @@ - * warn the user, else use the value directly as the maildir limit. - */ - if (*var_virt_mailbox_limit_maps != 0 && (limit_res = mail_addr_find(virtual_mailbox_limit_maps, state.msg_attr.user, (char **) NULL)) != 0) { -- n = atol(limit_res); -+ /* if there is some unexpected char in limit_res var, n will be zero! */ -+ n = strtoull(limit_res, NULL, 10); - if (n > 0) { - if ((n < var_message_limit) && (!var_virt_mailbox_limit_override)) { - n = var_virt_mailbox_limit; -@@ -535,13 +538,13 @@ - } - else { - if (msg_verbose) -- msg_info("%s: set virtual maildir limit size for %s to %ld", -+ msg_info("%s: set virtual maildir limit size for %s to %llu", - myname, usr_attr.mailbox, n); - } - } - else if (n == 0) { - if (msg_verbose) -- msg_info("%s: set virtual maildir limit size for %s to %ld", -+ msg_info("%s: set virtual maildir limit size for %s to %llu", - myname, usr_attr.mailbox, n); - } - else { -@@ -662,7 +665,7 @@ - */ - if (stat(tmpfile, &mail_stat) == 0) { - if (n != 0) { -- saved_size += (long) mail_stat.st_size; -+ saved_size += (uint64_t) mail_stat.st_size; - saved_count++; - } - if (var_virt_maildir_extended) { -@@ -866,7 +869,9 @@ - filequota = vstring_alloc(128); - vstring_get_null_bound(filequota, sizefile, 127); - vstream_fclose(sizefile); -- if (atol(vstring_export(filequota)) != n) -+ /* if there will be some unexpected char in filequota var, strtoull() return 0 -+ and this probably != n, so file will be rewritten */ -+ if (strtoull(vstring_export(filequota), NULL, 10) != n) - unlink(sizefilename); - } - -@@ -886,7 +891,7 @@ - - /* If the creation worked, write to the file, otherwise just give up. */ - if (sizefile) { -- vstream_fprintf(sizefile, "%ldS\n%ld %ld\n", n, saved_size, saved_count); -+ vstream_fprintf(sizefile, "%lluS\n%llu %llu\n", n, saved_size, saved_count); - vstream_fclose(sizefile); - } - } -diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/Makefile.in postfix-2.5.6/src/virtual/Makefile.in ---- postfix-2.5.6-vda-ng.orig/src/virtual/Makefile.in 2007-03-17 18:51:46.000000000 +0100 -+++ postfix-2.5.6/src/virtual/Makefile.in 2008-08-25 12:20:41.034889712 +0200 -@@ -4,7 +4,7 @@ - HDRS = virtual.h - TESTSRC = - DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE) --CFLAGS = $(DEBUG) $(OPT) $(DEFS) -+CFLAGS = $(DEBUG) $(OPT) $(DEFS) -std=gnu99 - PROG = virtual - TESTPROG= - INC_DIR = ../../include diff --git a/postfix-2.2.9-main.cf.patch b/postfix-2.7.1-main.cf.patch similarity index 66% rename from postfix-2.2.9-main.cf.patch rename to postfix-2.7.1-main.cf.patch index ed412c2..628fe95 100644 --- a/postfix-2.2.9-main.cf.patch +++ b/postfix-2.7.1-main.cf.patch @@ -1,6 +1,7 @@ ---- postfix-2.2.9-orig/conf/main.cf 2005-03-04 17:48:25.000000000 +0000 -+++ postfix-2.2.9/conf/main.cf 2008-08-04 19:08:01.086201423 +0000 -@@ -642,3 +642,29 @@ +diff -ruN postfix-2.7.1-orig/conf/main.cf postfix-2.7.1/conf/main.cf +--- postfix-2.7.1-orig/conf/main.cf 2007-12-18 14:50:25.000000000 +0100 ++++ postfix-2.7.1/conf/main.cf 2010-12-11 20:47:20.000000000 +0100 +@@ -649,3 +649,38 @@ # readme_directory: The location of the Postfix README files. # readme_directory = @@ -9,6 +10,7 @@ +############################################################ +# Start MySQL from postfixwiki.org +############################################################ ++relay_domains = $mydestination, hash:/etc/postfix/relay +virtual_alias_maps = hash:/etc/postfix/virtual +#virtual_uid_maps = static:303 +#virtual_gid_maps = static:303 @@ -16,16 +18,24 @@ +#virtual_mailbox_base = /srv/maildirs +#virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf +#virtual_mailbox_limit = 0 ++#virtual_mailbox_limit_inbox = no ++#virtual_mailbox_limit_maps = hash:/etc/postfix/vquota ++#virtual_mailbox_limit_override = yes +#virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf +#virtual_transport = virtual +## Additional for quota support +#virtual_create_maildirsize = yes +#virtual_mailbox_extended = yes ++### Needs Maildir++ compatible IMAP servers, like Courier-IMAP ++#virtual_maildir_filter = yes ++#virtual_maildir_filter_maps = hash:/etc/postfix/vfilter +#virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf +#virtual_mailbox_limit_override = yes +#virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. ++#virtual_maildir_limit_message_maps = hash:/etc/postfix/vmsg +#virtual_overquota_bounce = yes -+relay_domains = $mydestination, hash:/etc/postfix/relay ++#virtual_trash_count = yes ++#virtual_trash_name = ".Trash" +############################################################ +# End MySQL from postfixwiki.org +############################################################ diff --git a/postfix-2.6.1-vda-ng.patch b/postfix-vda-2.7.1.patch similarity index 90% rename from postfix-2.6.1-vda-ng.patch rename to postfix-vda-2.7.1.patch index a9ddbd8..5c7e097 100644 --- a/postfix-2.6.1-vda-ng.patch +++ b/postfix-vda-2.7.1.patch @@ -1,6 +1,6 @@ -diff -Nru postfix-2.5.6-orig/README_FILES/VDA_README postfix-2.5.6/README_FILES/VDA_README ---- postfix-2.5.6-orig/README_FILES/VDA_README 1969-12-31 21:00:00.000000000 -0300 -+++ postfix-2.5.6/README_FILES/VDA_README 2009-01-16 08:55:22.000000000 -0200 +diff -uNr postfix-2.7.1.orig/README_FILES/VDA_README postfix-2.7.1/README_FILES/VDA_README +--- postfix-2.7.1.orig/README_FILES/VDA_README 1970-01-01 01:00:00.000000000 +0100 ++++ postfix-2.7.1/README_FILES/VDA_README 2010-03-02 08:18:28.000000000 +0100 @@ -0,0 +1,97 @@ +Installation: + @@ -99,10 +99,10 @@ diff -Nru postfix-2.5.6-orig/README_FILES/VDA_README postfix-2.5.6/README_FILES/ +user2@domain.com.br # M2007022617 /^subject:.*Viagra.*/m REJECT /^subject:.*trash.*/m MOVE SpamFolder /^subject:.*pharmacy.*/m DISCARD + +More informations can be found at http://vda.sourceforge.net -diff -Nru postfix-2.5.6-orig/src/global/mail_params.h postfix-2.5.6/src/global/mail_params.h ---- postfix-2.5.6-orig/src/global/mail_params.h 2008-07-27 16:10:27.000000000 -0300 -+++ postfix-2.5.6/src/global/mail_params.h 2009-01-16 08:55:22.000000000 -0200 -@@ -2171,6 +2171,54 @@ +diff -uNr postfix-2.7.1.orig/src/global/mail_params.h postfix-2.7.1/src/global/mail_params.h +--- postfix-2.7.1.orig/src/global/mail_params.h 2010-01-17 21:54:35.000000000 +0100 ++++ postfix-2.7.1/src/global/mail_params.h 2010-03-02 08:18:28.000000000 +0100 +@@ -2311,6 +2311,54 @@ #define DEF_VIRT_GID_MAPS "" extern char *var_virt_gid_maps; @@ -157,9 +157,9 @@ diff -Nru postfix-2.5.6-orig/src/global/mail_params.h postfix-2.5.6/src/global/m #define VAR_VIRT_MINUID "virtual_minimum_uid" #define DEF_VIRT_MINUID 100 extern int var_virt_minimum_uid; -diff -Nru postfix-2.5.6-orig/src/util/file_limit.c postfix-2.5.6/src/util/file_limit.c ---- postfix-2.5.6-orig/src/util/file_limit.c 2003-10-22 16:48:36.000000000 -0200 -+++ postfix-2.5.6/src/util/file_limit.c 2009-01-16 08:55:22.000000000 -0200 +diff -uNr postfix-2.7.1.orig/src/util/file_limit.c postfix-2.7.1/src/util/file_limit.c +--- postfix-2.7.1.orig/src/util/file_limit.c 2003-10-22 20:48:36.000000000 +0200 ++++ postfix-2.7.1/src/util/file_limit.c 2010-03-02 08:18:28.000000000 +0100 @@ -85,7 +85,11 @@ #else struct rlimit rlim; @@ -173,9 +173,9 @@ diff -Nru postfix-2.5.6-orig/src/util/file_limit.c postfix-2.5.6/src/util/file_l if (setrlimit(RLIMIT_FSIZE, &rlim) < 0) msg_fatal("setrlimit: %m"); #ifdef SIGXFSZ -diff -Nru postfix-2.5.6-orig/src/virtual/mailbox.c postfix-2.5.6/src/virtual/mailbox.c ---- postfix-2.5.6-orig/src/virtual/mailbox.c 2008-07-25 22:22:37.000000000 -0300 -+++ postfix-2.5.6/src/virtual/mailbox.c 2009-01-16 08:55:22.000000000 -0200 +diff -uNr postfix-2.7.1.orig/src/virtual/mailbox.c postfix-2.7.1/src/virtual/mailbox.c +--- postfix-2.7.1.orig/src/virtual/mailbox.c 2008-07-26 03:22:37.000000000 +0200 ++++ postfix-2.7.1/src/virtual/mailbox.c 2010-03-02 08:18:28.000000000 +0100 @@ -70,6 +70,70 @@ #define YES 1 #define NO 0 @@ -355,10 +355,10 @@ diff -Nru postfix-2.5.6-orig/src/virtual/mailbox.c postfix-2.5.6/src/virtual/mai /* * Cleanup. -diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/maildir.c ---- postfix-2.5.6-orig/src/virtual/maildir.c 2006-06-26 09:59:19.000000000 -0300 -+++ postfix-2.5.6/src/virtual/maildir.c 2009-01-16 08:55:22.000000000 -0200 -@@ -63,28 +63,406 @@ +diff -uNr postfix-2.7.1.orig/src/virtual/maildir.c postfix-2.7.1/src/virtual/maildir.c +--- postfix-2.7.1.orig/src/virtual/maildir.c 2006-06-26 14:59:19.000000000 +0200 ++++ postfix-2.7.1/src/virtual/maildir.c 2010-03-02 08:28:18.000000000 +0100 +@@ -63,28 +63,419 @@ #include #include @@ -398,28 +398,36 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + * Returns the size of all mails as read from maildirsize, + * zero if it couldn't read the file. + */ -+static long read_maildirsize(char *dirname, long *countptr) ++static long read_maildirsize(char *filename, long *sumptr, long *countptr) +{ ++ char *myname = "read_maildirsize"; + struct stat statbuf; -+ VSTRING *sizefilename = vstring_alloc(1024); + VSTREAM *sizefile; + char *p; + int len, first; -+ long sum = 0, count = 0; ++ long sum = 0, count = 0, ret_value = -1; + -+ vstring_sprintf(sizefilename, "%s/%s", dirname, "maildirsize"); -+ -+ sizefile = vstream_fopen(STR(sizefilename), O_RDONLY, 0); -+ if (!sizefile || (stat(STR(sizefilename), &statbuf) < 0) || (statbuf.st_size > SIZEFILE_MAX)) { ++ if (msg_verbose) ++ msg_info("%s: we will use sizefile = '%s'", myname, filename); ++ ++ sizefile = vstream_fopen(filename, O_RDONLY, 0); ++ if (!sizefile) { ++ if (msg_verbose) ++ msg_info("%s: cannot open %s: %m (maybe file does not exist)", myname, filename); ++ ++ return -1; ++ } else if (stat(filename, &statbuf) < 0 || statbuf.st_size > SIZEFILE_MAX) { + if (sizefile) { + vstream_fclose(sizefile); -+ unlink(STR(sizefilename)); ++ unlink(filename); + } -+ vstring_free(sizefilename); -+ -+ return 0; ++ ++ if (msg_verbose) ++ msg_info("%s: stat() returned < 0 or filesize > SIZEFILE_MAX (filename = %s, filesize = %ld)", myname, filename, statbuf.st_size); ++ ++ return -1; + } -+ ++ + VSTRING *sizebuf = vstring_alloc(SIZEFILE_MAX); + len = vstream_fread(sizefile, STR(sizebuf), SIZEFILE_MAX); + @@ -443,30 +451,43 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + continue; + } + -+ if(sscanf(q, "%ld %ld", &n, &c) == 2) { ++ if (sscanf(q, "%ld %ld", &n, &c) == 2) { + sum += n; + count += c; ++ /* if (msg_verbose) ++ msg_info("%s: we read line '%s', totals: sum = %ld, count = %ld", myname, q, sum, count); */ + } + else { + vstream_fclose(sizefile); -+ unlink(STR(sizefilename)); -+ -+ msg_warn("read_maildirsize: invalid line '%s' found in %s, removing maildirsize file", q, STR(sizefilename)); -+ -+ vstring_free(sizefilename); ++ unlink(filename); ++ msg_warn("%s: invalid line '%s' found in %s, removing maildirsize file", myname, q, filename); + vstring_free(sizebuf); + -+ return 0; ++ return -1; + } + } + -+ vstream_fclose(sizefile); -+ vstring_free(sizefilename); -+ vstring_free(sizebuf); -+ + *countptr = count; ++ *sumptr = sum; ++ ++ if (sum < 0 || count < 0 || (sum == 0 && count != 0) || (sum != 0 && count == 0)) { ++ if (msg_verbose) { ++ msg_info("%s: we will return -1 and unlink %s, because file count or sum is <= 0 (sum = %ld, count = %ld)", myname, filename, sum, count); ++ } ++ ++ unlink(filename); ++ ret_value = -1; ++ } else { ++ if (msg_verbose) ++ msg_info("%s: we will return Maildir size = %ld, count = %ld", myname, *sumptr, *countptr); + -+ return sum; ++ ret_value = sum; ++ } ++ ++ vstream_fclose(sizefile); ++ vstring_free(sizebuf); ++ ++ return ret_value; +} + +/* @@ -483,8 +504,7 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai +{ + const char *o; + int yes = 0; - --int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) ++ + if ((o = strrchr(n, '/')) == 0) + o = n; + @@ -540,12 +560,6 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + struct dirent *ent; + struct stat statbuf; + -+ if (!var_virt_mailbox_limit_inbox && var_virt_maildir_extended && (sum = read_maildirsize(dirname, countptr))) { -+ if (msg_verbose) -+ msg_info("%s: maildirsize used: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr); -+ return sum; -+ } -+ + dir = opendir(dirname); + if (dir == NULL) { + if (make_dirs(dirname, 0700) == 0) { /* Try to create the dirs. */ @@ -566,14 +580,12 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + long tmpsum = 0; + VSTRING *buffer; + -+ if (var_virt_trash_count) { -+ if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) -+ continue; -+ } -+ else { -+ if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0 || strcmp(name, var_virt_trash_name) == 0) -+ continue; -+ } ++ /* do not count dot a double-dot dirs */ ++ if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) ++ continue; ++ /* do not count if this is the trash subdir and if we should NOT count it */ ++ else if (var_virt_trash_count == 0 && strcmp(name, var_virt_trash_name) == 0) ++ continue; + + /* + * Here comes the real logic behind this function. @@ -624,7 +636,8 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + } + } + closedir(dir); -+ + +-int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) + if (msg_verbose) + msg_info("%s: full scan done: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr); + @@ -777,7 +790,7 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai GETTIMEOFDAY(&starttime); -@@ -93,15 +471,14 @@ +@@ -93,15 +484,14 @@ */ state.level++; if (msg_verbose) @@ -796,7 +809,7 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai } /* -@@ -109,17 +486,91 @@ +@@ -109,18 +499,110 @@ * attribute to reflect the final recipient. */ if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0) @@ -829,7 +842,15 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + tmpdir = concatenate(tmpdir, "tmp/", (char *) 0); + curdir = concatenate(curdir, "cur/", (char *) 0); + } -+ + ++ /* get the sizefilename, no matter if we use var_virt_maildir_extended */ ++ if (*var_virt_maildir_suffix == 0) { ++ sizefilename = concatenate(usr_attr.mailbox, "maildirsize", (char *) 0); ++ } else { ++ sizefilename = concatenate(usr_attr.mailbox, var_virt_maildir_suffix, (char *) 0); ++ sizefilename = concatenate(sizefilename, "maildirsize", (char *) 0); ++ } ++ + /* + * Look up the virtual maildir limit size for this user. + * Fall back to virtual_mailbox_limit in case lookup failed. @@ -845,12 +866,8 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + if ((n < var_message_limit) && (!var_virt_mailbox_limit_override)) { + n = var_virt_mailbox_limit; + -+ msg_warn("%s: recipient %s - virtual maildir limit is " -+ "smaller than %s in %s - falling back to %s", -+ myname, -+ state.msg_attr.user, -+ VAR_MESSAGE_LIMIT, -+ virtual_mailbox_limit_maps->title, ++ msg_warn("%s: recipient %s - virtual maildir limit is smaller than %s in %s - falling back to %s", ++ myname, state.msg_attr.user, VAR_MESSAGE_LIMIT, virtual_mailbox_limit_maps->title, + VAR_VIRT_MAILBOX_LIMIT); + } + else { @@ -874,27 +891,42 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + n = var_virt_mailbox_limit; + } + -+ /* -+ * Check quota before delivering the mail. -+ */ ++ /* If there should is a quota on maildir generaly, check it ++ before dlivering the mail */ + if (n != 0) { + set_eugid(usr_attr.uid, usr_attr.gid); -+ if (var_virt_mailbox_limit_inbox) { -+ /* Check Inbox only (new, cur and tmp dirs). */ -+ saved_size = check_dir_size(newdir, &saved_count); -+ saved_size += check_dir_size(curdir, &saved_count); -+ saved_size += check_dir_size(tmpdir, &saved_count); -+ } -+ else { -+ /* Check all boxes. */ -+ saved_size = check_dir_size(usr_attr.mailbox, &saved_count); -+ } -+ set_eugid(var_owner_uid, var_owner_gid); ++ /* try to read the quota from maildirsize file. Returned values by read_maildirsize: ++ x < 0 = something failed ++ x >= 0 = reading successfully finished - sum si returned, so sum size of Maildir was 0 or more */ ++ if (!var_virt_mailbox_limit_inbox && var_virt_maildir_extended && read_maildirsize(sizefilename, &saved_size, &saved_count) >= 0) { ++ if (msg_verbose) ++ msg_info("%s: maildirsize used=%s sum=%ld count=%ld", myname, sizefilename, saved_size, saved_count); ++ } else { ++ if (msg_verbose) ++ msg_info("%s: var_virt_mailbox_limit == 1 OR var_virt_maildir_extended == 0 OR read_maildidrsize() returned value x < 0 as saying something failed", myname); ++ ++ /* sanity */ ++ saved_size = 0; ++ saved_count = 0; ++ ++ if (var_virt_mailbox_limit_inbox) { ++ /* Check Inbox only (new, cur and tmp dirs). */ ++ saved_size = check_dir_size(newdir, &saved_count); ++ saved_size += check_dir_size(curdir, &saved_count); ++ saved_size += check_dir_size(tmpdir, &saved_count); ++ } else { ++ /* Check all boxes. */ ++ saved_size = check_dir_size(usr_attr.mailbox, &saved_count); ++ } ++ ++ set_eugid(var_owner_uid, var_owner_gid); ++ } + } - ++ /* * Create and write the file as the recipient, so that file quota work. -@@ -174,46 +625,296 @@ + * Create any missing directories on the fly. The file name is chosen +@@ -174,46 +656,288 @@ * [...] */ set_eugid(usr_attr.uid, usr_attr.gid); @@ -1162,14 +1194,6 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + if (var_virt_maildir_extended) { + time(&tm); + -+ if (*var_virt_maildir_suffix == 0) { -+ sizefilename = concatenate(usr_attr.mailbox, "maildirsize", (char *) 0); -+ } -+ else { -+ sizefilename = concatenate(usr_attr.mailbox, var_virt_maildir_suffix, (char *) 0); -+ sizefilename = concatenate(sizefilename, "maildirsize", (char *) 0); -+ } -+ + /* Check if the quota in the file is the same as the current one, if not, delete the file. */ + sizefile = vstream_fopen(sizefilename, O_RDONLY, 0); + if (sizefile) { @@ -1228,7 +1252,7 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai } set_eugid(var_owner_uid, var_owner_gid); -@@ -223,31 +924,64 @@ +@@ -223,31 +947,64 @@ * location possibly under user control. */ if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { @@ -1312,9 +1336,9 @@ diff -Nru postfix-2.5.6-orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/mai + return (deliver_status); } -diff -Nru postfix-2.5.6-orig/src/virtual/virtual.c postfix-2.5.6/src/virtual/virtual.c ---- postfix-2.5.6-orig/src/virtual/virtual.c 2008-07-27 18:00:11.000000000 -0300 -+++ postfix-2.5.6/src/virtual/virtual.c 2009-01-16 08:55:22.000000000 -0200 +diff -uNr postfix-2.7.1.orig/src/virtual/virtual.c postfix-2.7.1/src/virtual/virtual.c +--- postfix-2.7.1.orig/src/virtual/virtual.c 2010-01-02 02:57:04.000000000 +0100 ++++ postfix-2.7.1/src/virtual/virtual.c 2010-03-02 08:18:28.000000000 +0100 @@ -335,12 +335,30 @@ char *var_mail_spool_dir; /* XXX dependency fix */ bool var_strict_mbox_owner; @@ -1444,9 +1468,9 @@ diff -Nru postfix-2.5.6-orig/src/virtual/virtual.c postfix-2.5.6/src/virtual/vir MAIL_SERVER_PRIVILEGED, 0); } -diff -Nru postfix-2.5.6-orig/src/virtual/virtual.h postfix-2.5.6/src/virtual/virtual.h ---- postfix-2.5.6-orig/src/virtual/virtual.h 2006-01-07 21:59:47.000000000 -0200 -+++ postfix-2.5.6/src/virtual/virtual.h 2009-01-16 08:55:22.000000000 -0200 +diff -uNr postfix-2.7.1.orig/src/virtual/virtual.h postfix-2.7.1/src/virtual/virtual.h +--- postfix-2.7.1.orig/src/virtual/virtual.h 2006-01-08 00:59:47.000000000 +0100 ++++ postfix-2.7.1/src/virtual/virtual.h 2010-03-02 08:18:28.000000000 +0100 @@ -34,6 +34,9 @@ extern MAPS *virtual_mailbox_maps; extern MAPS *virtual_uid_maps; diff --git a/postfix.changes b/postfix.changes index 20c4658..8daae94 100644 --- a/postfix.changes +++ b/postfix.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Sat Dec 11 19:50:25 UTC 2010 - chris@computersalat.de + +- update vda patch + o remove 2.6.1-vda-ng.patch + o remove 2.6.1-vda-ng-64bit.patch + o add vda-2.7.1.patch +- rework main.cf.patch + o remove 2.2.9-main.cf.patch + o add 2.7.1-main.cf.patch + ------------------------------------------------------------------- Tue Dec 7 22:02:56 UTC 2010 - coolo@novell.com diff --git a/postfix.spec b/postfix.spec index 8e645c8..59f756c 100644 --- a/postfix.spec +++ b/postfix.spec @@ -36,9 +36,8 @@ Patch: dynamic_maps.patch Patch1: dynamic_maps_pie.patch Patch2: pointer_to_literals.patch Patch3: ipv6_disabled.patch -Patch10: %{name}-2.2.9-main.cf.patch -Patch11: %{name}-2.6.1-vda-ng.patch -Patch12: %{name}-2.6.1-vda-ng-64bit.patch +Patch10: %{name}-2.7.1-main.cf.patch +Patch11: %{name}-vda-2.7.1.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %insserv_prereq %fillup_prereq PreReq: /usr/bin/getent @@ -171,9 +170,6 @@ Authors: %patch3 -p1 %patch10 -p1 %patch11 -p1 -%ifarch x86_64 -%patch12 -p1 -%endif # --------------------------------------------------------------------------- %build