updated on Thu Jan 12 16:09:17 UTC 2012
[aur-mirror.git] / qmail / qmail-queue-custom-error.patch
blob0f709bfc8774d3a4fd1f3e43701ce40a1d84cc5e
1 Common subdirectories: qmail-1.03.orig/qmail-rhinit and qmail-1.03/qmail-rhinit
2 diff -u --new-file qmail-1.03.orig/qmail.c qmail-1.03/qmail.c
3 --- qmail-1.03.orig/qmail.c 2005-07-05 16:03:09.194496536 -0300
4 +++ qmail-1.03/qmail.c 2005-07-05 16:05:23.594392705 -0300
5 @@ -23,22 +23,32 @@
7 int pim[2];
8 int pie[2];
9 + int pierr[2];
11 setup_qqargs();
13 if (pipe(pim) == -1) return -1;
14 if (pipe(pie) == -1) { close(pim[0]); close(pim[1]); return -1; }
15 + if (pipe(pierr) == -1) {
16 + close(pim[0]); close(pim[1]);
17 + close(pie[0]); close(pie[1]);
18 + close(pierr[0]); close(pierr[1]);
19 + return -1;
20 + }
22 switch(qq->pid = vfork()) {
23 case -1:
24 + close(pierr[0]); close(pierr[1]);
25 close(pim[0]); close(pim[1]);
26 close(pie[0]); close(pie[1]);
27 return -1;
28 case 0:
29 close(pim[1]);
30 close(pie[1]);
31 + close(pierr[0]); /* we want to receive data */
32 if (fd_move(0,pim[0]) == -1) _exit(120);
33 if (fd_move(1,pie[0]) == -1) _exit(120);
34 + if (fd_move(4,pierr[1]) == -1) _exit(120);
35 if (chdir(auto_qmail) == -1) _exit(61);
36 execv(*binqqargs,binqqargs);
37 _exit(120);
38 @@ -46,6 +56,7 @@
40 qq->fdm = pim[1]; close(pim[0]);
41 qq->fde = pie[1]; close(pie[0]);
42 + qq->fderr = pierr[0]; close(pierr[1]);
43 substdio_fdbuf(&qq->ss,write,qq->fdm,qq->buf,sizeof(qq->buf));
44 qq->flagerr = 0;
45 return 0;
46 @@ -93,10 +104,22 @@
48 int wstat;
49 int exitcode;
50 + int match;
51 + char ch;
52 + static char errstr[256];
53 + int len = 0;
55 qmail_put(qq,"",1);
56 if (!qq->flagerr) if (substdio_flush(&qq->ss) == -1) qq->flagerr = 1;
57 close(qq->fde);
58 + substdio_fdbuf(&qq->ss,read,qq->fderr,qq->buf,sizeof(qq->buf));
59 + while( substdio_bget(&qq->ss,&ch,1) && len < 255){
60 + errstr[len]=ch;
61 + len++;
62 + }
63 + if (len > 0) errstr[len]='\0'; /* add str-term */
65 + close(qq->fderr);
67 if (wait_pid(&wstat,qq->pid) != qq->pid)
68 return "Zqq waitpid surprise (#4.3.0)";
69 @@ -129,8 +152,11 @@
70 case 81: return "Zqq internal bug (#4.3.0)";
71 case 120: return "Zunable to exec qq (#4.3.0)";
72 default:
73 + if (exitcode == 82 && len > 2){
74 + return errstr;
75 + }
76 if ((exitcode >= 11) && (exitcode <= 40))
77 - return "Dqq permanent problem (#5.3.0)";
78 + return "Dqq permanent problem (#5.3.0)";
79 return "Zqq temporary problem (#4.3.0)";
82 diff -u --new-file qmail-1.03.orig/qmail.h qmail-1.03/qmail.h
83 --- qmail-1.03.orig/qmail.h 2005-07-05 16:03:09.172501954 -0300
84 +++ qmail-1.03/qmail.h 2005-07-05 16:03:32.480760932 -0300
85 @@ -8,6 +8,7 @@
86 unsigned long pid;
87 int fdm;
88 int fde;
89 + int fderr;
90 substdio ss;
91 char buf[1024];
92 } ;