summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-29 08:28:58 -0400
committerSam Varshavchik2013-08-29 08:30:38 -0400
commitd61d9e62ef6d46f5747a9099fe308455de348947 (patch)
tree5ba81406d2606fbbb11ab476da1335ada424f705
parent2b94d904b8c03ab9ae4074230ac50aa1ad7f362b (diff)
downloadcourier-libs-d61d9e62ef6d46f5747a9099fe308455de348947.tar.bz2
maildrop: xfilter command fixes
-rw-r--r--maildrop/filter.C19
-rw-r--r--maildrop/message.C2
-rw-r--r--maildrop/testsuite2335
3 files changed, 192 insertions, 164 deletions
diff --git a/maildrop/filter.C b/maildrop/filter.C
index 373eb47..d59e2ec 100644
--- a/maildrop/filter.C
+++ b/maildrop/filter.C
@@ -185,7 +185,15 @@ int maxfd=pipe1.fds[0];
if (n < 0)
{
- if (errno != EINTR) // Perfectly OK
+ if (errno != EINTR
+#ifdef EAGAIN
+ && errno != EAGAIN
+#endif
+#ifdef EWOULDBLOCK
+ && errno != EWOULDBLOCK
+#endif
+
+ ) // Perfectly OK
{
FD_CLR(pipe0.fds[1], &writefd);
pipe0.close1();
@@ -211,7 +219,14 @@ int maxfd=pipe1.fds[0];
if (readbuflen < 0)
{
- if (errno != EINTR)
+ if (errno != EINTR
+#ifdef EAGAIN
+ && errno != EAGAIN
+#endif
+#ifdef EWOULDBLOCK
+ && errno != EWOULDBLOCK
+#endif
+ )
{
merr << "maildrop: error reading from filter.\n";
errflag=1;
diff --git a/maildrop/message.C b/maildrop/message.C
index d583fbe..7d156c5 100644
--- a/maildrop/message.C
+++ b/maildrop/message.C
@@ -118,7 +118,6 @@ int n;
while ((n=read(fd, buf, sizeof(buf))) > 0)
{
- rfc2045_parse(rfc2045p, buf, n);
Init(buf, n);
}
if (n < 0)
@@ -130,6 +129,7 @@ int n;
void Message::Init(const void *data, unsigned cnt)
{
+ rfc2045_parse(rfc2045p, (const char *)data, cnt);
{
const char *p=(const char*)data;
unsigned n=cnt;
diff --git a/maildrop/testsuite2 b/maildrop/testsuite2
index 7540536..df65bc8 100644
--- a/maildrop/testsuite2
+++ b/maildrop/testsuite2
@@ -64,166 +64,179 @@ EOF
chmod 600 ./testsuite1.filter ./testsuite2.filter ./testsuite3.filter ./testsuite4.filter ./testsuite5.filter
-type="small message"
-
-# Small file
-if ./maildrop ./testsuite1.filter <testsuite.msg
-then
- :
-else
- echo "Test 1 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite2.filter <testsuite.msg
-then
- :
-else
- echo "Test 2 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite3.filter <testsuite.msg
-then
- echo "Test 3 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite4.filter <testsuite.msg
-then
- :
-else
- echo "Test 4 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite5.filter <testsuite.msg
-then
- :
-else
- echo "Test 5 failed: $type"
- exit 1
-fi
-
-type="small pipe"
-if cat testsuite.msg | ./maildrop ./testsuite1.filter
-then
- :
-else
- echo "Test 1 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite2.filter
-then
- :
-else
- echo "Test 2 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite3.filter
-then
- echo "Test 3 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite4.filter
-then
- :
-else
- echo "Test 4 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite5.filter
-then
- :
-else
- echo "Test 5 failed: $type"
- exit 1
-fi
-
-dd if="/dev/zero" bs=8192 count=2 2>/dev/null | tr '\0' '\012' >>testsuite.msg
-
-type="large message"
-
-# Large file
-if ./maildrop ./testsuite1.filter <testsuite.msg
-then
- :
-else
- echo "Test 1 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite2.filter <testsuite.msg
-then
- :
-else
- echo "Test 2 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite3.filter <testsuite.msg
-then
- echo "Test 3 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite4.filter <testsuite.msg
-then
- :
-else
- echo "Test 4 failed: $type"
- exit 1
-fi
-
-if ./maildrop ./testsuite5.filter <testsuite.msg
-then
- :
-else
- echo "Test 5 failed: $type"
- exit 1
-fi
-
-type="large pipe"
-if cat testsuite.msg | ./maildrop ./testsuite1.filter
-then
- :
-else
- echo "Test 1 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite2.filter
-then
- :
-else
- echo "Test 2 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite3.filter
-then
- echo "Test 3 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite4.filter
-then
- :
-else
- echo "Test 4 failed: $type"
- exit 1
-fi
-
-if cat testsuite.msg | ./maildrop ./testsuite5.filter
-then
- :
-else
- echo "Test 5 failed: $type"
- exit 1
-fi
+runtest() {
+ type="small message $1"
+
+ # Small file
+ if ./maildrop ./testsuite1.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 1 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite2.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 2 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite3.filter <testsuite.msg
+ then
+ echo "Test 3 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite4.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 4 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite5.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 5 failed: $type"
+ exit 1
+ fi
+
+ type="small pipe"
+ if cat testsuite.msg | ./maildrop ./testsuite1.filter
+ then
+ :
+ else
+ echo "Test 1 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite2.filter
+ then
+ :
+ else
+ echo "Test 2 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite3.filter
+ then
+ echo "Test 3 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite4.filter
+ then
+ :
+ else
+ echo "Test 4 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite5.filter
+ then
+ :
+ else
+ echo "Test 5 failed: $type"
+ exit 1
+ fi
+
+ dd if="/dev/zero" bs=8192 count=2 2>/dev/null | tr '\0' '\012' >>testsuite.msg
+
+ type="large message $1"
+
+ # Large file
+ if ./maildrop ./testsuite1.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 1 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite2.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 2 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite3.filter <testsuite.msg
+ then
+ echo "Test 3 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite4.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 4 failed: $type"
+ exit 1
+ fi
+
+ if ./maildrop ./testsuite5.filter <testsuite.msg
+ then
+ :
+ else
+ echo "Test 5 failed: $type"
+ exit 1
+ fi
+
+ type="large pipe"
+ if cat testsuite.msg | ./maildrop ./testsuite1.filter
+ then
+ :
+ else
+ echo "Test 1 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite2.filter
+ then
+ :
+ else
+ echo "Test 2 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite3.filter
+ then
+ echo "Test 3 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite4.filter
+ then
+ :
+ else
+ echo "Test 4 failed: $type"
+ exit 1
+ fi
+
+ if cat testsuite.msg | ./maildrop ./testsuite5.filter
+ then
+ :
+ else
+ echo "Test 5 failed: $type"
+ exit 1
+ fi
+}
+
+runtest ""
+
+for f in testsuite?.filter
+do
+ echo 'xfilter "cat"' >t
+ cat $f >>t
+ chmod 600 t
+ mv -f t $f
+done
+runtest " with xfilter"
rm -f testsuite?.filter testsuite.msg