diff options
| -rw-r--r-- | maildrop/filter.C | 19 | ||||
| -rw-r--r-- | maildrop/message.C | 2 | ||||
| -rw-r--r-- | maildrop/testsuite2 | 335 |
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 |
