Hi everyone,

I figured it was about time I submitted these patches to the community at large since my system administrator recently updated TMDA to the latest and greatest necessitating my revisitation of the modifications that I'd been maintaining on our local install for the last couple of years. The first patch tmda-1.1.12-db.diff adds database support for the PENDING_*_APPEND variables by adding the following default variables:

  DB_PENDING_BLACKLIST_APPEND
  DB_PENDING_DELETE_APPEND
  DB_PENDING_RELEASE_APPEND
  DB_PENDING_WHITELIST_APPEND

And then properly handling them in the Pending.py module. These new variables operate just like the currently existing DB_*_APPEND variables, just extending the concept to cover what I felt was some missing functionality. I've personally been using these since 2005.

The second patch tmda-1.1.12-stdin.diff modifies Pending.py to not close and reopen stdin when tmda-pending is being run non interactively. When the close and reopen change was applied to Pending.py it broke my current cron job (see chkpending.txt) that rewrites the mailto links with the TMDA-CGI urls to release messages. When Pending.py tries to reopen stdin in a non interactive session it fails with the following error (see tmda-pending-cron-error.txt for complete error text):

  IOError: [Errno 6] No such device or address: '/dev/tty'

Finally since I'm submitting two patches at the same time I've included diffs for each patch separately and one diff for both patches combined.
Traceback (most recent call last):
  File "/usr/bin/tmda-pending", line 333, in ?
    main()
  File "/usr/bin/tmda-pending", line 324, in main
    pretend = opts.pretend
  File "/usr/lib/python2.4/site-packages/TMDA/Pending.py", line 94, in initQueue
    sys.stdin = open('/dev/tty', 'r')
IOError: [Errno 6] No such device or address: '/dev/tty'
#!/bin/bash
URL=`grep ^CGI_URL /etc/tmdarc | cut -d = -f 2 | cut -d \" -f 2`
HOSTNAME=`grep ^HOSTNAME /etc/tmdarc | cut -d = -f 2 | cut -d \" -f 2`
TMPFILE=`mktemp` && {
  #echo Using URL from /etc/tmdarc: $URL
  #echo Using HOSTNAME from /etc/tmdarc: $HOSTNAME 
  #echo Using TMPFILE: $TMPFILE

/usr/bin/tmda-pending -c ~/.tmda/config2 -TCbO 2d| grep -v "\*\{10\}"| awk 
'{print $1}'| \
/usr/bin/tmda-pending -bs - | sed -e 
's|^<mailto:\(.*\)-confirm-\(.*\)@'$HOSTNAME'>|'$URL'\?'`/usr/bin/id -u`'.\2|g' 
> $TMPFILE
CNT=`cat $TMPFILE|wc -c`
if (($CNT>0)); then
  cat $TMPFILE | mail -s 'TMDA pending summary' `whoami`;
fi
rm -f $TMPFILE
}


diff -ur tmda-1.1.12/TMDA/ChangeLog tmda-1.1.12-db/TMDA/ChangeLog
--- tmda-1.1.12/TMDA/ChangeLog  2007-04-26 13:29:55.000000000 -0700
+++ tmda-1.1.12-db/TMDA/ChangeLog       2007-10-02 06:32:44.000000000 -0700
@@ -1,3 +1,16 @@
+2005-10-07  David Grimberg  <[EMAIL PROTECTED]>
+
+       * Defaults.py (DB_PENDING_BLACKLIST_APPEND): New Variable.
+       (DB_PENDING_DELETE_APPEND): Ditto.
+       (DB_PENDING_RELEASE_APPEND): Ditto.
+       (DB_PENDING_WHITELIST_APPEND): Ditto.
+
+       * Pending.py: Modified to use new DB_PENDING_* variables.
+       Also added code to check if operating in interactive or
+       non interactive mode.  If not interactive, don't reset
+       sys.stdin since the reset was causing issues with some
+       scripted operations.
+
 2007-04-26  Jason R. Mastaler  <[EMAIL PROTECTED]>
 
        * pythonlib/email: Sync up with email 4.0.2.
diff -ur tmda-1.1.12/TMDA/Defaults.py tmda-1.1.12-db/TMDA/Defaults.py
--- tmda-1.1.12/TMDA/Defaults.py        2007-02-23 12:20:10.000000000 -0800
+++ tmda-1.1.12-db/TMDA/Defaults.py     2007-10-02 06:30:06.000000000 -0700
@@ -1155,6 +1155,35 @@
 if not vars().has_key('PENDING_BLACKLIST_APPEND'):
     PENDING_BLACKLIST_APPEND = None
 
+# DB_PENDING_BLACKLIST_APPEND
+# SQL INSERT statement to be used to insert blacklisted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_BLACKLIST_APPEND = """
+#  INSERT INTO blacklist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_BLACKLIST_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'drop'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_BLACKLIST_APPEND'):
+    DB_PENDING_BLACKLIST_APPEND = None
+
 # PENDING_DELETE_APPEND
 # Filename to which a sender's e-mail address should be automatically
 # appended when a message is "deleted" by tmda-pending.  tmda-filter's
@@ -1170,6 +1199,35 @@
 if not vars().has_key('PENDING_DELETE_APPEND'):
     PENDING_DELETE_APPEND = None
 
+# DB_PENDING_DELETE_APPEND
+# SQL INSERT statement to be used to insert deleted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_DELETE_APPEND = """
+#  INSERT INTO blacklist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_DELETE_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'confirm'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_DELETE_APPEND'):
+    DB_PENDING_DELETE_APPEND = None
+
 # PENDING_RELEASE_APPEND
 # Filename to which a sender's e-mail address should be automatically
 # appended when a message is "released" by tmda-pending.
@@ -1183,6 +1241,35 @@
 if not vars().has_key('PENDING_RELEASE_APPEND'):
     PENDING_RELEASE_APPEND = None
 
+# DB_PENDING_RELEASE_APPEND
+# SQL INSERT statement to be used to insert released sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_RELEASE_APPEND = """
+#  INSERT INTO whitelist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_RELEASE_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'accept'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_RELEASE_APPEND'):
+    DB_PENDING_RELEASE_APPEND = None
+
 # PENDING_WHITELIST_APPEND
 # Filename to which a sender's e-mail address should be appended
 # when a message is "whitelisted" by tmda-pending.
@@ -1196,6 +1283,35 @@
 if not vars().has_key('PENDING_WHITELIST_APPEND'):
     PENDING_WHITELIST_APPEND = None
 
+# DB_PENDING_WHITELIST_APPEND
+# SQL INSERT statement to be used to insert whitelisted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_WHITELIST_APPEND = """
+#  INSERT INTO whitelist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_WHITELIST_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'accept'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_WHITELIST_APPEND'):
+    DB_PENDING_WHITELIST_APPEND = None
+
 # PENDING_WHITELIST_RELEASE
 # An option detailing the action taken when 'Whitelist' is the 
 # current action in tmda-pending or tmda-cgi
diff -ur tmda-1.1.12/TMDA/Pending.py tmda-1.1.12-db/TMDA/Pending.py
--- tmda-1.1.12/TMDA/Pending.py 2007-01-17 13:49:44.000000000 -0800
+++ tmda-1.1.12-db/TMDA/Pending.py      2007-10-01 07:15:40.000000000 -0700
@@ -32,6 +32,7 @@
 
 import Defaults
 import Errors
+import FilterParser
 import Util
 from TMDA.Queue.Queue import Queue
 
@@ -306,9 +307,11 @@
         """Get the user input."""
         try:
             message = '([p]ass / [s]how / [r]el / [d]el'
-            if Defaults.PENDING_WHITELIST_APPEND:
+            if Defaults.PENDING_WHITELIST_APPEND or \
+               (Defaults.DB_PENDING_WHITELIST_APPEND and 
Defaults.DB_CONNECTION):
                 message = message + ' / [w]hite'
-            if Defaults.PENDING_BLACKLIST_APPEND:
+            if Defaults.PENDING_BLACKLIST_APPEND or \
+               (Defaults.DB_PENDING_BLACKLIST_APPEND and 
Defaults.DB_CONNECTION):
                 message = message + ' / [b]lack'
             message = message + ' / [q]uit) [%s]: '
             inp = raw_input(message % self.dispose_def)
@@ -371,6 +374,16 @@
         if Defaults.PENDING_RELEASE_APPEND:
             Util.append_to_file(self.append_address,
                                 Defaults.PENDING_RELEASE_APPEND)
+        if Defaults.DB_PENDING_RELEASE_APPEND and Defaults.DB_CONNECTION:
+            _username = Defaults.USERNAME.lower()
+            _hostname = Defaults.HOSTNAME.lower()
+            _recipient = _username + '@' + _hostname
+            params = FilterParser.create_sql_params(
+                recipient=_recipient, username=_username,
+                hostname=_hostname, sender=self.append_address)
+            Util.db_insert(Defaults.DB_CONNECTION,
+                           Defaults.DB_PENDING_RELEASE_APPEND,
+                           params)
         timestamp, pid = self.msgid.split('.')
         # Remove Return-Path: to avoid duplicates.
         del self.msgobj['return-path']
@@ -403,27 +416,61 @@
         if Defaults.PENDING_DELETE_APPEND:
             Util.append_to_file(self.append_address,
                                 Defaults.PENDING_DELETE_APPEND)
+        if Defaults.DB_PENDING_DELETE_APPEND and Defaults.DB_CONNECTION:
+            _username = Defaults.USERNAME.lower()
+            _hostname = Defaults.HOSTNAME.lower()
+            _recipient = _username + '@' + _hostname
+            params = FilterParser.create_sql_params(
+                recipient=_recipient, username=_username,
+                hostname=_hostname, sender=self.append_address)
+            Util.db_insert(Defaults.DB_CONNECTION,
+                           Defaults.DB_PENDING_DELETE_APPEND,
+                           params)
        Q.delete_message(self.msgid)
 
     def whitelist(self):
         """Whitelist the message sender."""
-        if Defaults.PENDING_WHITELIST_APPEND:
-            Util.append_to_file(self.append_address,
+        if Defaults.PENDING_WHITELIST_APPEND or \
+           (Defaults.DB_PENDING_WHITELIST_APPEND and Defaults.DB_CONNECTION):
+            if Defaults.PENDING_WHITELIST_APPEND:
+                Util.append_to_file(self.append_address,
                                 Defaults.PENDING_WHITELIST_APPEND)
+            if Defaults.DB_PENDING_WHITELIST_APPEND and Defaults.DB_CONNECTION:
+                _username = Defaults.USERNAME.lower()
+                _hostname = Defaults.HOSTNAME.lower()
+                _recipient = _username + '@' + _hostname
+                params = FilterParser.create_sql_params(
+                    recipient=_recipient, username=_username,
+                    hostname=_hostname, sender=self.append_address)
+                Util.db_insert(Defaults.DB_CONNECTION,
+                               Defaults.DB_PENDING_WHITELIST_APPEND,
+                               params)
             if Defaults.PENDING_WHITELIST_RELEASE == 1:
                 self.release()
         else:
             raise Errors.ConfigError, \
-                  'PENDING_WHITELIST_APPEND not defined!'
+                  '[DB_]PENDING_WHITELIST_APPEND not defined!'
 
     def blacklist(self):
         """Blacklist the message sender."""
-        if Defaults.PENDING_BLACKLIST_APPEND:
-            Util.append_to_file(self.append_address,
+        if Defaults.PENDING_BLACKLIST_APPEND or \
+           (Defaults.DB_PENDING_BLACKLIST_APPEND and Defaults.DB_CONNECTION):
+            if Defaults.PENDING_BLACKLIST_APPEND:
+                Util.append_to_file(self.append_address,
                                 Defaults.PENDING_BLACKLIST_APPEND)
+            if Defaults.DB_PENDING_BLACKLIST_APPEND and Defaults.DB_CONNECTION:
+                _username = Defaults.USERNAME.lower()
+                _hostname = Defaults.HOSTNAME.lower()
+                _recipient = _username + '@' + _hostname
+                params = FilterParser.create_sql_params(
+                    recipient=_recipient, username=_username,
+                    hostname=_hostname, sender=self.append_address)
+                Util.db_insert(Defaults.DB_CONNECTION,
+                               Defaults.DB_PENDING_BLACKLIST_APPEND,
+                               params)
         else:
             raise Errors.ConfigError, \
-                  'PENDING_BLACKLIST_APPEND not defined!'
+                  '[DB_]PENDING_BLACKLIST_APPEND not defined!'
 
     def pager(self):
         Util.pager(self.show())
diff -ur tmda-1.1.12/TMDA/ChangeLog tmda-1.1.12.a/TMDA/ChangeLog
--- tmda-1.1.12/TMDA/ChangeLog  2007-04-26 13:29:55.000000000 -0700
+++ tmda-1.1.12.a/TMDA/ChangeLog        2007-09-17 06:52:01.000000000 -0700
@@ -1,3 +1,16 @@
+2005-10-07  David Grimberg  <[EMAIL PROTECTED]>
+
+       * Defaults.py (DB_PENDING_BLACKLIST_APPEND): New Variable.
+       (DB_PENDING_DELETE_APPEND): Ditto.
+       (DB_PENDING_RELEASE_APPEND): Ditto.
+       (DB_PENDING_WHITELIST_APPEND): Ditto.
+
+       * Pending.py: Modified to use new DB_PENDING_* variables.
+       Also added code to check if operating in interactive or
+       non interactive mode.  If not interactive, don't reset
+       sys.stdin since the reset was causing issues with some
+       scripted operations.
+
 2007-04-26  Jason R. Mastaler  <[EMAIL PROTECTED]>
 
        * pythonlib/email: Sync up with email 4.0.2.
diff -ur tmda-1.1.12/TMDA/Defaults.py tmda-1.1.12.a/TMDA/Defaults.py
--- tmda-1.1.12/TMDA/Defaults.py        2007-02-23 12:20:10.000000000 -0800
+++ tmda-1.1.12.a/TMDA/Defaults.py      2007-09-17 06:40:02.000000000 -0700
@@ -1155,6 +1155,35 @@
 if not vars().has_key('PENDING_BLACKLIST_APPEND'):
     PENDING_BLACKLIST_APPEND = None
 
+# DB_PENDING_BLACKLIST_APPEND
+# SQL INSERT statement to be used to insert blacklisted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_BLACKLIST_APPEND = """
+#  INSERT INTO blacklist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_BLACKLIST_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'drop'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_BLACKLIST_APPEND'):
+    DB_PENDING_BLACKLIST_APPEND = None
+
 # PENDING_DELETE_APPEND
 # Filename to which a sender's e-mail address should be automatically
 # appended when a message is "deleted" by tmda-pending.  tmda-filter's
@@ -1170,6 +1199,35 @@
 if not vars().has_key('PENDING_DELETE_APPEND'):
     PENDING_DELETE_APPEND = None
 
+# DB_PENDING_DELETE_APPEND
+# SQL INSERT statement to be used to insert deleted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_DELETE_APPEND = """
+#  INSERT INTO blacklist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_DELETE_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'confirm'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_DELETE_APPEND'):
+    DB_PENDING_DELETE_APPEND = None
+
 # PENDING_RELEASE_APPEND
 # Filename to which a sender's e-mail address should be automatically
 # appended when a message is "released" by tmda-pending.
@@ -1183,6 +1241,35 @@
 if not vars().has_key('PENDING_RELEASE_APPEND'):
     PENDING_RELEASE_APPEND = None
 
+# DB_PENDING_RELEASE_APPEND
+# SQL INSERT statement to be used to insert released sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_RELEASE_APPEND = """
+#  INSERT INTO whitelist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_RELEASE_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'accept'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_RELEASE_APPEND'):
+    DB_PENDING_RELEASE_APPEND = None
+
 # PENDING_WHITELIST_APPEND
 # Filename to which a sender's e-mail address should be appended
 # when a message is "whitelisted" by tmda-pending.
@@ -1196,6 +1283,35 @@
 if not vars().has_key('PENDING_WHITELIST_APPEND'):
     PENDING_WHITELIST_APPEND = None
 
+# DB_PENDING_WHITELIST_APPEND
+# SQL INSERT statement to be used to insert whitelisted sender addresses
+# into a SQL database. The Python DB API will take care of properly
+# quoting parameters that are strings.
+# Requires a valid DB_CONNECTION object.
+#
+# Available substition parameters are:
+#
+# %(recipient)s  - [EMAIL PROTECTED]
+# %(username)s   - USERNAME
+# %(hostname)s   - HOSTNAME
+# %(sender)s     - sender's address (envelope sender or X-Primary-Address)
+#
+# Examples:
+#
+# DB_PENDING_WHITELIST_APPEND = """
+#  INSERT INTO whitelist (user_email, address)
+#       VALUES (%(recipient)s, %(sender)s)"""
+#
+# DB_PENDING_WHITELIST_APPEND = """
+#  INSERT INTO wildcard_list (uid, address, action)
+#       SELECT uid, %(sender)s, 'accept'
+#         FROM users
+#        WHERE users.email = %(recipient)s"""
+#
+# Default is None
+if not vars().has_key('DB_PENDING_WHITELIST_APPEND'):
+    DB_PENDING_WHITELIST_APPEND = None
+
 # PENDING_WHITELIST_RELEASE
 # An option detailing the action taken when 'Whitelist' is the 
 # current action in tmda-pending or tmda-cgi
diff -ur tmda-1.1.12/TMDA/Pending.py tmda-1.1.12.a/TMDA/Pending.py
--- tmda-1.1.12/TMDA/Pending.py 2007-01-17 13:49:44.000000000 -0800
+++ tmda-1.1.12.a/TMDA/Pending.py       2007-09-27 07:07:00.000000000 -0700
@@ -32,6 +32,7 @@
 
 import Defaults
 import Errors
+import FilterParser
 import Util
 from TMDA.Queue.Queue import Queue
 
@@ -70,6 +71,7 @@
         self.younger = younger
         self.pretend = pretend
 
+        self.interactive = 0
         self.stdout = sys.stdout
 
 
@@ -90,8 +92,9 @@
                     self.msgs.extend(line.strip().split())
                 self.msgs.remove('-')
                 # re-open stdin on the tty
-                sys.stdin.close()
-                sys.stdin = open('/dev/tty', 'r')
+                if self.interactive:
+                  sys.stdin.close()
+                  sys.stdin = open('/dev/tty', 'r')
 
         if not self.msgs and not wantedstdin:
             self.msgs = Q.fetch_ids()
@@ -282,6 +285,8 @@
                        younger,
                        pretend)
 
+        self.interactive = 1
+
 
     def initQueue(self):
         """Additionally initialize the interactive queue."""
@@ -306,9 +311,11 @@
         """Get the user input."""
         try:
             message = '([p]ass / [s]how / [r]el / [d]el'
-            if Defaults.PENDING_WHITELIST_APPEND:
+            if Defaults.PENDING_WHITELIST_APPEND or \
+               (Defaults.DB_PENDING_WHITELIST_APPEND and 
Defaults.DB_CONNECTION):
                 message = message + ' / [w]hite'
-            if Defaults.PENDING_BLACKLIST_APPEND:
+            if Defaults.PENDING_BLACKLIST_APPEND or \
+               (Defaults.DB_PENDING_BLACKLIST_APPEND and 
Defaults.DB_CONNECTION):
                 message = message + ' / [b]lack'
             message = message + ' / [q]uit) [%s]: '
             inp = raw_input(message % self.dispose_def)
@@ -371,6 +378,16 @@
         if Defaults.PENDING_RELEASE_APPEND:
             Util.append_to_file(self.append_address,
                                 Defaults.PENDING_RELEASE_APPEND)
+        if Defaults.DB_PENDING_RELEASE_APPEND and Defaults.DB_CONNECTION:
+            _username = Defaults.USERNAME.lower()
+            _hostname = Defaults.HOSTNAME.lower()
+            _recipient = _username + '@' + _hostname
+            params = FilterParser.create_sql_params(
+                recipient=_recipient, username=_username,
+                hostname=_hostname, sender=self.append_address)
+            Util.db_insert(Defaults.DB_CONNECTION,
+                           Defaults.DB_PENDING_RELEASE_APPEND,
+                           params)
         timestamp, pid = self.msgid.split('.')
         # Remove Return-Path: to avoid duplicates.
         del self.msgobj['return-path']
@@ -403,27 +420,61 @@
         if Defaults.PENDING_DELETE_APPEND:
             Util.append_to_file(self.append_address,
                                 Defaults.PENDING_DELETE_APPEND)
+        if Defaults.DB_PENDING_DELETE_APPEND and Defaults.DB_CONNECTION:
+            _username = Defaults.USERNAME.lower()
+            _hostname = Defaults.HOSTNAME.lower()
+            _recipient = _username + '@' + _hostname
+            params = FilterParser.create_sql_params(
+                recipient=_recipient, username=_username,
+                hostname=_hostname, sender=self.append_address)
+            Util.db_insert(Defaults.DB_CONNECTION,
+                           Defaults.DB_PENDING_DELETE_APPEND,
+                           params)
        Q.delete_message(self.msgid)
 
     def whitelist(self):
         """Whitelist the message sender."""
-        if Defaults.PENDING_WHITELIST_APPEND:
-            Util.append_to_file(self.append_address,
+        if Defaults.PENDING_WHITELIST_APPEND or \
+           (Defaults.DB_PENDING_WHITELIST_APPEND and Defaults.DB_CONNECTION):
+            if Defaults.PENDING_WHITELIST_APPEND:
+                Util.append_to_file(self.append_address,
                                 Defaults.PENDING_WHITELIST_APPEND)
+            if Defaults.DB_PENDING_WHITELIST_APPEND and Defaults.DB_CONNECTION:
+                _username = Defaults.USERNAME.lower()
+                _hostname = Defaults.HOSTNAME.lower()
+                _recipient = _username + '@' + _hostname
+                params = FilterParser.create_sql_params(
+                    recipient=_recipient, username=_username,
+                    hostname=_hostname, sender=self.append_address)
+                Util.db_insert(Defaults.DB_CONNECTION,
+                               Defaults.DB_PENDING_WHITELIST_APPEND,
+                               params)
             if Defaults.PENDING_WHITELIST_RELEASE == 1:
                 self.release()
         else:
             raise Errors.ConfigError, \
-                  'PENDING_WHITELIST_APPEND not defined!'
+                  '[DB_]PENDING_WHITELIST_APPEND not defined!'
 
     def blacklist(self):
         """Blacklist the message sender."""
-        if Defaults.PENDING_BLACKLIST_APPEND:
-            Util.append_to_file(self.append_address,
+        if Defaults.PENDING_BLACKLIST_APPEND or \
+           (Defaults.DB_PENDING_BLACKLIST_APPEND and Defaults.DB_CONNECTION):
+            if Defaults.PENDING_BLACKLIST_APPEND:
+                Util.append_to_file(self.append_address,
                                 Defaults.PENDING_BLACKLIST_APPEND)
+            if Defaults.DB_PENDING_BLACKLIST_APPEND and Defaults.DB_CONNECTION:
+                _username = Defaults.USERNAME.lower()
+                _hostname = Defaults.HOSTNAME.lower()
+                _recipient = _username + '@' + _hostname
+                params = FilterParser.create_sql_params(
+                    recipient=_recipient, username=_username,
+                    hostname=_hostname, sender=self.append_address)
+                Util.db_insert(Defaults.DB_CONNECTION,
+                               Defaults.DB_PENDING_BLACKLIST_APPEND,
+                               params)
         else:
             raise Errors.ConfigError, \
-                  'PENDING_BLACKLIST_APPEND not defined!'
+                  '[DB_]PENDING_BLACKLIST_APPEND not defined!'
 
     def pager(self):
         Util.pager(self.show())
diff -ur tmda-1.1.12/TMDA/Pending.py tmda-1.1.12.a/TMDA/Pending.py
--- tmda-1.1.12/TMDA/Pending.py 2007-01-17 13:49:44.000000000 -0800
+++ tmda-1.1.12.a/TMDA/Pending.py       2007-10-01 06:54:12.000000000 -0700
@@ -70,6 +70,7 @@
         self.younger = younger
         self.pretend = pretend
 
+        self.interactive = 0
         self.stdout = sys.stdout
 
 
@@ -90,8 +91,9 @@
                     self.msgs.extend(line.strip().split())
                 self.msgs.remove('-')
                 # re-open stdin on the tty
-                sys.stdin.close()
-                sys.stdin = open('/dev/tty', 'r')
+                if self.interactive:
+                  sys.stdin.close()
+                  sys.stdin = open('/dev/tty', 'r')
 
         if not self.msgs and not wantedstdin:
             self.msgs = Q.fetch_ids()
@@ -282,6 +284,8 @@
                        younger,
                        pretend)
 
+        self.interactive = 1
+
 
     def initQueue(self):
         """Additionally initialize the interactive queue."""
_________________________________________________
tmda-workers mailing list ([email protected])
http://tmda.net/lists/listinfo/tmda-workers

Reply via email to