procmail
[Top] [All Lists]

Re: How to let procmail use mre memory?

2010-01-31 12:52:21
On Sun, 2010-01-31 at 12:31 -0600, JW Simpson wrote:
On Sun, 2010-01-31 at 15:40 +0100, Michelle Konzack wrote:
Hello,
...
procmail: Assigning "LOG=####  6 ####
"
####  6 ####
procmail: Executing " test -z "${TMPVAR5}""
procmail: Failed to execute ""
procmail: Non-zero exitcode (69) from " test -z "${TMPVAR5}""
procmail: No match on " test -z "${TMPVAR5}""
procmail: Executing " test -z "${TMPVAR5}""
procmail: Failed to execute ""
procmail: Non-zero exitcode (69) from " test -z "${TMPVAR5}""
procmail: No match on " test -z "${TMPVAR5}""
procmail: Assigning "LOG=####  9 ####

I still don not see what is causing the 'Failed to execute ""' error.

I was, however, able to reproduce the exitcode 69 with a bit less code:

john(_at_)system76-pc:~/kon$ cat kon.rc
SHELL='/bin/sh'
NL='
'

LINEBUF=654321

# 127 works; 128 fails
SIZE=128

LOG="SIZE=${SIZE} kB${NL}"

BIGVAR=`seq -ws '' 1 100000 | dd count=$SIZE bs=1K`

VERBOSE=yes

      :0
      * ? test -z "${TMPVAR5}"
      {
LOG=matched
      }

VERBOSE=no
:0
|

john(_at_)system76-pc:~/kon$ :|procmail -m kon.rc
SIZE=128 kB
128+0 records in
128+0 records out
131072 bytes (131 kB) copied, 0.022458 s, 5.8 MB/s
procmail: [16547] Sun Jan 31 12:15:32 2010
procmail: Executing " test -z "${TMPVAR5}""
procmail: Failed to execute " test -z "${TMPVAR5}""
procmail: [16547] Sun Jan 31 12:15:32 2010
procmail: Non-zero exitcode (69) from " test -z "${TMPVAR5}""
procmail: No match on " test -z "${TMPVAR5}""
procmail: Assigning "VERBOSE=no"

Regarding exitcode 69, I only found this -> 
http://www.errorpro.com/unix/unixerror.php?ecode=ESRMNT&descr=Stream%20Problems%20Errors

I believe the limit you are hitting might actually be with exporting the 
environment to /bin/sh ?

john(_at_)system76-pc:~/kon$ SIZE=127;export BIGVAR=`seq -ws '' 1 1000000 | 
dd count=$SIZE bs=1K`;test -z "${BIGVAR}"; /bin/sh -c 'test -z "${BIGVAR}"; 
echo $?'
127+0 records in
127+0 records out
130048 bytes (130 kB) copied, 0.02076 s, 6.3 MB/s
1

john(_at_)system76-pc:~/kon$ SIZE=128;export BIGVAR=`seq -ws '' 1 1000000 | 
dd count=$SIZE bs=1K`;test -z "${BIGVAR}"; /bin/sh -c 'test -z "${BIGVAR}"; 
echo $?'
128+0 records in
128+0 records out
131072 bytes (131 kB) copied, 0.0207557 s, 6.3 MB/s
bash: /bin/sh: Argument list too long

john(_at_)system76-pc:~/kon$ man bash
bash: /usr/bin/man: Argument list too long

john(_at_)system76-pc:~/kon$ man bash
bash: /usr/bin/man: Argument list too long

john(_at_)system76-pc:~/kon$ env
bash: /usr/bin/env: Argument list too long

I am not certain, but it seems to me that those limits are possibly 
controlled by "stack" or "msqqueue" in /etc/security/limits.conf -> 
http://linux.die.net/man/5/limits.conf

Perhaps another list member can shed more light on the topic?

I would pursue modifying the code to avoid reaching this limit rather than 
attempting to change the limit.


Some more info:
http://www.unix.com/unix-advanced-expert-users/15577-arg-list-too-long.html 
says:
        The system could not handle the number of arguments given to a
        command or program when it combined those arguments with the
        environment's exported shell variables. The argument list limit
        is the size of the argument list plus the size of the
        environment's exported shell variables.
        
        The easiest solution is to reduce the size of the parent process
        environment by unsetting extraneous environment variables. (See
        the man page for the shell you're using to find out how to list
        and change your environment variables.) Then run the program
        again.
        
        An argument list longer than ARG_MAX bytes was presented to a
        member of the exec() family of system calls.
        
        The symbolic name for this error is E2BIG, errno=7.

... and ...

        Check out the xargs command. Can you post the command that is failing?

Following up on that, I get this:
        john(_at_)system76-pc:~/kon$ SIZE=127;export BIGVAR=`seq -ws '' 1 
1000000 | dd count=$SIZE bs=1K`;test -z "${BIGVAR}"; echo /bin/sh -c 'test -z 
"${BIGVAR}"; echo $?' | xargs --show-limits
        127+0 records in
        127+0 records out
        130048 bytes (130 kB) copied, 0.0055172 s, 23.6 MB/s
        Your environment variables take up 132526 bytes
        POSIX upper limit on argument length (this system): 1962578
        POSIX smallest allowable upper limit on argument length (all systems): 
4096
        Maximum length of command we could actually use: 1830052
        Size of command buffer we are actually using: 131072
        /bin/sh -c test -z ${BIGVAR}; echo $?


-- 
JW Simpson <john(_at_)swajime(_dot_)com>
SwaJime's Cove℠

____________________________________________________________
procmail mailing list   Procmail homepage: http://www.procmail.org/
procmail(_at_)lists(_dot_)RWTH-Aachen(_dot_)de
http://mailman.rwth-aachen.de/mailman/listinfo/procmail