I've just checked this in. It seems kosher to me, but I don't use
tmda-pending much, so if anyone notices any problems, speak up.

Thanks Lloyd.


Lloyd Zusman <[EMAIL PROTECTED]> writes:

> I'm using TMDA with the Courier MTA, and all my users get virtual email
> directories as implemented in the Courier manner.  On my system, all of
> these are subdirectories which live under /var/vmail, and all are owned
> by uid=vmail and gid=vmail.  The .tmda and Maildir directories live in
> this subdirectory.  For example, for the virtual email address
> "[EMAIL PROTECTED]", we have the following items:
>
>   /var/vmail/[EMAIL PROTECTED]          - the top-level email directory
>   /var/vmail/[EMAIL PROTECTED]/.tmda    - the associated tmda home
>   /var/vmail/[EMAIL PROTECTED]/Maildir  - the associated Maildir
>
> I can make use of the --vhost-script option for tmda-filter and
> tmda-ofmipd to cause each of these programs to set HOME to the
> appropriate virtual directory, but I am unable to perform the
> corresponding function with tmda-pending, which lacks the --vhost-script
> option.
>
> Furthermore, the method in http://wiki.tmda.net/VirtualDomainsHowto for
> using tmda-pending with virtual domains does not work for my Courier
> virtual email setup ... tmda-pending still can't find the pending
> directory.
>
> Up until now, I have always manually hacked the TMDA source code to
> allow my users to utilize tmda-pending with their Courier virtual mail
> directories.  However, I'm getting tired of having to reinstall this
> hack every time I upgrade TMDA.
>
> Therefore, I have implemented a patch for tmda-pending which also gives
> it a --vhost-script option.  It works the same as it does for
> tmda-filter and tmda-ofmipd.  The script specified by this option will
> be passed the user name and the domain name as determined with the
> following algorithm (which makes use of two other new options:
> --vhost-user and --vhost-domain) ...
>
>   user name:   if the --vhost-user option is set, use it
>
>                else if the USER environment variable is set,
>                use it
>
>                else if the LOGNAME environment variable is set,
>                use it
>
>                else ERROR
>
>   domain name: if the --vhost-domain option is set, use it
>
>                else if socket.gethostbyaddr(socket.gethostname())[0]
>                succeeds, use this value
>
>                else ERROR
>
> I have tested this, and it works fine for me, although I wouldn't be
> surprised if I have overlooked certain test cases, so please feel free
> to improve this code.
>
> I sincerely hope that this feature can make it into the next TMDA
> release.
>
> This patch is based on tmda-1.1.9:
>
>
> --- tmda-pending.orig 2006-12-18 16:19:03.000000000 -0500
> +++ tmda-pending      2006-12-18 16:19:20.000000000 -0500
> @@ -1,3 +1,4 @@
>  #!/usr/bin/python2.4
> +# -*- python -*-
>  #
>  # Copyright (C) 2001-2006 Jason R. Mastaler <[EMAIL PROTECTED]>
> @@ -25,4 +26,5 @@
>  import os
>  import sys
> +import socket
>  
>  try:
> @@ -72,4 +74,7 @@
>    $ tmda-pending -T -b
>  
> +  (same as above, but use /usr/local/bin/vhome as the vhome-script)
> +  $ tmda-pending -T -b --vhome-script=/usr/local/bin/vhome
> +
>    (interactively operate on just these messages)
>    $ tmda-pending 1012182077.5803 1012939546.7870
> @@ -101,4 +106,31 @@
>  
>  # general
> +gengroup.add_option("--vhome-script",
> +                  metavar="SCRIPT", dest="vhomescript",
> +                  help= \
> +"""Full pathname of SCRIPT that prints a virtual email user's home
> +directory on standard output.  tmda-pending will read that path and
> +set $HOME to that path so that '~' expansion works properly for
> +virtual users.  The script takes two arguments, the user name and
> +the domain, on its command line.  This option is for use with the
> +VPopMail and VMailMgr add-ons to qmail and with other systems that
> +manage virtual email addresses.  The user name is obtained from the
> +USER and LOGNAME environment variables, in that order, or by the
> +value of the '--vhome-user' option, if defined. The domain name is
> +obtained by socket.gethostbyaddr(socket.gethostname())[0], or by
> +the '--vhome-domain' option, if defined.""")
> +
> +gengroup.add_option("--vhome-user",
> +                  metavar="USER", dest="vhomeuser",
> +                  help= \
> +"""The user name to optionally pass to the program specified
> +in the '--vhome-script' option, above.""")
> +
> +gengroup.add_option("--vhome-domain",
> +                  metavar="DOMAIN", dest="vhomedomain",
> +                  help= \
> +"""The domain name to optionally pass to the program specified
> +in the '--vhome-script' option, above.""")
> +
>  gengroup.add_option("-c", "--config-file",
>                      metavar="FILE", dest="config_file",
> @@ -230,4 +262,42 @@
>      threshold = None
>  
> +if opts.vhomescript:
> +    """Set $HOME to the recipient's (virtual user) home directory."""
> +    user = None
> +    if opts.vhomeuser:
> +     user = opts.vhomeuser
> +    else:
> +     try:
> +            user = os.environ['USER']
> +        except:
> +            try:
> +                user = os.environ['LOGNAME']
> +            except:
> +                user = None
> +    domain = None
> +    if opts.vhomedomain:
> +        domain = opts.vhomedomain
> +    else:
> +        try:
> +            domain = socket.gethostbyaddr(socket.gethostname())[0]
> +        except:
> +            domain = None
> +    message = ''
> +    if user is None:
> +        message += ' USER'
> +    if domain is None:
> +        message += ' DOMAIN'
> +    if message != '':
> +        sys.stdout.write('missing:%s\n' % message)
> +        sys.exit(1)
> +    cmd = "%s '%s' '%s'" % ( opts.vhomescript, user, domain )
> +    fpin = os.popen(cmd)
> +    vuserhomedir = fpin.read().strip()
> +    if fpin.close() is None:
> +        os.environ['HOME'] = vuserhomedir
> +        os.chdir(vuserhomedir)
> +    else:
> +        sys.stdout.write('invocation failed: %s\n' % ( cmd, ))
> +        sys.exit(1)
>  
>  from TMDA import Pending
>
>
>
>
> -- 
>  Lloyd Zusman
>  [EMAIL PROTECTED]
>  God bless you.

_________________________________________________
tmda-workers mailing list ([email protected])
http://tmda.net/lists/listinfo/tmda-workers

Reply via email to