--- On Tue, 7/27/10, John W. Baxter <[email protected]> wrote:

> It is possible that the problem was triggered by doing an
> initial test using
> the command line shown above, as root. That could have
> created a file only
> root can read or write. Or it could be something else
> entirely, of course.
> 
> Python tracebacks, for one with Python knowledge, can be
> very useful. It's
> annoying when they get truncated (Exim does that when we
> pipe to a Python
> program which fails (every few days, for reasons we haven't
> figured
> out--retries do not fail--it's always a message from a
> mobile device on
> AT&T, which should narrow it down)). A switch to get
> more than one line
> logged would be nice--I hope I haven't missed such a thing
> now that I've
> ranted.


I crossed my fingers (I had visions of megabytes of stuff being dumped on the 
console) and put the -D switch in the spamd startup options and restarted spamd.

It actually dumped only about a dozen lines on the console, having to do with 
startup.  After that, all the debugging trace info was logged to SA's log,  
which I have configured as /var/log/exim/spamd.log.  spamd.log quickly ran to a 
megabyte.  With enough data to chew on, I yanked out the -D option and 
restarted SA again. 

The pyzor-relevant debug output in spamd.log (time stamps removed):

dbg: pyzor: pyzor is available: /usr/bin/pyzor

dbg: dns: entering helper-app run mode

dbg: pyzor: opening pipe: /usr/bin/pyzor check < 
/tmp/.spamassassin10626hxECI3tmp

dbg: util: setuid: ruid=8 euid=8

dbg: pyzor: got response: Traceback (most recent call last):\n File 
"/usr/bin/pyzor", line 4, in ?\n pyzor.client.run()\n File 
"/usr/lib/python2.4/site-packages/pyzor/client.py", line 991, in run\n 
ExecCall().run()\n File "/usr/lib/python2.4/site-packages/pyzor/client.py", 
line 176, in run\n os.mkdir(homedir)\nOSError: [Errno 13] Permission denied: 
'/var/spool/exim/scan/.pyzor'

dbg: dns: leaving helper-app run mode
warn: pyzor: check failed: internal error, python traceback seen in response

Looking at client.py , line 175-176 I see:
       if not os.path.exists(homedir):
            os.mkdir(homedir)

/var/spool/exim/scan/.pyzor definitely exists, so says I, why the heck is it 
trying to make a dir that already exists?  (I don't know Python but the meaning 
seemed clear) 

After studying it for 5 minutes, I Googled "os.path.exists", which got me to 
the answer at:
   http://docs.python.org/library/os.path.html
It seems the os.path.exists function returns false if permission is denied to 
os.stat(path), which as one might surmise is simply linux stat.
IOW, a permission problem as suspected. 

The following line revealed the problem:
dbg: util: setuid: ruid=8 euid=8

On my machine, uid 8 is user mail.  I had configured spamd to run as user mail, 
so that made sense.  However, the pyzor home folder was owned by user exim.  I 
had thought it was sufficient to put the homedir in group mail and make the dir 
group writable.  I didn't count on a python existence test that requires 'stat' 
privilege. 

Solution:
=================================
I changed the SA options to run as exim.  This caused a new permissions problem 
(for exim) on the spamd socket.  spamd creates this socket as root.  With a few 
more tweaks, I now have pyzor running without the traceback error message.

However, the pyzor result is frequently:
check failed: no response

So, traceback problem solved.  However, Pyzor doesn't seem to contribute much 
to spam detection, and adds networking delay which may not even elicit a 
response.  So, I will probably kill it and be done with it.  I have some other 
exim issues of higher priority.




      

-- 
## List details at http://lists.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to