Gmane
From: James Molina <j.molina@...>
Subject: RE: Email Notification for new tickets is not working
Newsgroups: gmane.comp.version-control.subversion.trac.general
Date: 2006-04-06 23:33:29 GMT (9 years, 13 weeks, 4 days, 19 hours and 55 minutes ago)
Ok so I finaly figured it out, so apparently even if SELinux is disabled it still reads the policy rules, so
reading the audit.log I saw the following

type=AVC msg=audit(1144271107.899:2774): avc:  denied  { name_connect } for  pid=31413 comm="httpd"
dest=25 scontext=root:system_r:httpd_t tcontext=system_u:object_r:smtp_port_t tclass=tcp_socket
type=SYSCALL msg=audit(1144271107.899:2774): arch=40000003 syscall=102 success=no exit=-13 a0=3
a1=bf975610 a2=591114 a3=b6895f38 items=0 pid=31413 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48
egid=48 sgid=48 fsgid=48 comm="httpd" exe="/usr/sbin/httpd"

So by running the following command

[root]# audit2allow -i /var/log/audit/audit.log -l

This will print out a list of things that were denied, I found that the following was the most relevant one
"allow httpd_t smtp_port_t:tcp_socket name_connect;"

I then downloaded the SELinux source by doing
[root]# yum install selinux-policy-targeted-sources

Then
[root]# vi /etc/selinux/targeted/src/policy/domains/misc/local.te

And added the "allow httpd_t smtp_port_t:tcp_socket name_connect;"
Then you simply reload SELinux 
cd /etc/selinux/targeted/src/policy/
make load

That changed the error to Authentication Error. So Trac really should be more specific about this (like
tell you what fields are required), you DO need the following fields even if they are blank.
Smtp_user = 
Smtp_password = 
And simply leave them blank. 

Another issue was the fact that I only had '127.0.0.1 localhost' in my /etc/hosts file and apparently
Python requires you to have an extra alias, so I added '127.0.0.1	MachineNameHere	localhost'. After
all that email notifications finally work, now I only gotta get my mailserver to stop marking them as spam :).

Anyways thanks a lot everyone.
                                   James

________________________________________
From: James Molina 

John, I followed your suggestion and got 2 different .py scripts for
testing, I ran the following two and they both worked (after a bit of
tweaking to my HOSTS file) but Trac still throws same error. Also I have
SELinux disabled until I figure this issue out, so I do not believe it's
an issue with that. Got any other ideas?

***********************************************************

import smtplib

def prompt(prompt):

    return raw_input(prompt).strip()

fromaddr = prompt("From: ")

toaddrs  = prompt("To: ").split()

print "Enter message, end with ^D (Unix) or ^Z (Windows):"

# Add the From: and To: headers at the start!

msg = ("From: %s\r\nTo: %s\r\n\r\n"

       % (fromaddr, ", ".join(toaddrs)))

while 1:

    try:

        line = raw_input()

    except EOFError:

        break

    if not line:

        break

    msg = msg + line

print "Message length is " + repr(len(msg))

server = smtplib.SMTP('127.0.0.1')

server.set_debuglevel(1)

server.sendmail(fromaddr, toaddrs, msg)

server.quit()

*************************************************************

Also tried the following script

import smtplib

message = 'blah blah blah'

SENDER = 'me at mydomain'

RECIPIENT = 'my email addr here'

server = smtplib.SMTP('localhost')

response = server.sendmail(SENDER, RECIPIENT, message)

server.close()

print str(response)

***************************************************************

I used the user Apache to test (had to modify the passwd file since by
default it has a shell disabled) and they both work fine. 

 
James

James Molina wrote:
> 
>     self.server = smtplib.SMTP(self.smtp_server, self.smtp_port)
>   File "/usr/lib/python2.4/smtplib.py", line 241, in __init__
>     (code, msg) = self.connect(host, port)
>   File "/usr/lib/python2.4/smtplib.py", line 303, in connect
>     raise socket.error, msg
> error: (13, 'Permission denied')

This is a socket error.  It's saying that you aren't allowed to connect 
using the socket.  That means that it's an operating system issue.  I 
would suspect that it's some selinux funness.  Try sending an email as 
the user that trac runs under (probably apache or www-data).  Also, as 
said user, fire up a python shell and import smtplib and use that to 
send a test message.

-John