Here are two modules I worked on last week while on a trip and ready for some discussion.

mod_smtpd_auth
mod_smtpd_auth_dbd

http://www.brianfrance.com/software/apache/

mod_smtpd.patch will be needed which adds the auth hooks and info into the smtp rec. This patch also does a dns look up of the remote_addr because some auth methods need it and I figured it would be a good idea to do it anyways.

mod_smtpd_auth currently has support for PLAIN, LOGIN, CRAM-MD5 and DIGEST-MD5, but after finishing it I think whole auth stuff needs a little rethinking/reworking.

The way I did the mod_smtpd_auth module was to add the command AUTH to mod_smtpd and then mod_smtpd_auth hooks that and has a big if/else if block for all the auth methods. I think a better way to do it is to have the auth stuff in the mod_smtpd server define two hooks, one for methods and one for validating/getting passwords. Then in smtp_protocol the command auth hook will just get the function to call from the method hook list (just like command hooks are done) and run that function. The big if/else if block that is currently in mod_smtpd_auth will be turned into multiple modules that will use the passwords hooks get get validate/get passwords. This means mod_smtpd_auth will then go away and be replaced with two types of modules, method (mod_smtpd_authm_*) and validate/getting (mod_smtpd_authv_*) modules:

mod_smtpd_authm_plain
mod_smtpd_authm_login
mod_smtpd_authm_cram_md5
mod_smtpd_authm_digest_md5

mod_smtpd_authv_pwd
mod_smtpd_authv_dbd
mod_smtpd_authv_dba

The other thing that will need to change would be the AUTH ehlo response. It would need pull the method names from the method hook list, which I don't know if it is possible or not.

I think somebody with a little more hook experience could use the current code and make the changes pretty quick, but I don't know enough about the hook stuff to get it all setup with out getting a big headache.

There are a few issue that might be a problem with this setup. If somebody wants to enable/disable auth methods based on server or virtual hosts could be a problem, but I think that can be handled by having the method modules delay hooking the method hook until the connect phases to make sure they are enabled in that server. Not sure if this is a problem or not, but if you look at the smtpd_protocol auth function, it is pretty plain compared to the other ones. This goes back to my original request to be able to set the response code from the module (mod_smtpd_auth sets 6 different codes). Not sure how I did this was the best way, but it got it working until we talk about this again.

On a side note, has there been some bugs fixed recently in apreq for header parsing? I am trying to do final testing of mod_smtpd_clamd and mod_smtpd_spamd, but I am failing on a assert in the parser header function when I use real emails (vs real simple stuff). Need to svn update and try it again when I get a chance, but figure I would ask.

Brian

Reply via email to