This patch allows you to specify

+listname

in the accept_these_nonmembers, hold_these_nonmembers, 
reject_these_nonmembers, and discard_these_nonmembers boxes
in the list configuration, and will dynamically include
the members of those lists. 

This is very useful when you have lists that forward to
other lists. 

For example:

        mygroup-leaders
        mygroup-helpers
        mygroup-workers
        
        with

        mygroup-all forwarding to each of the above.

You could put

+mygroup-helpers
+mygroup-workers
+mygroup-leaders

in the accept box for each of those lists, and it will allow any of 
the members of any of the lists to post to the mygroup-all list. Or
similar affect for other configurations.

-- Nathan

------------------------------------------------------------
Nathan Neulinger                       EMail:  [EMAIL PROTECTED]
University of Missouri - Rolla         Phone: (573) 341-4841
Computing Services                       Fax: (573) 341-4216
Index: Mailman/MailList.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/MailList.py,v
retrieving revision 2.104
diff -u -r2.104 MailList.py
--- Mailman/MailList.py 24 Feb 2003 15:37:57 -0000      2.104
+++ Mailman/MailList.py 13 Mar 2003 16:27:41 -0000
@@ -30,6 +30,7 @@
 import socket
 import urllib
 import cPickle
+import string
 
 from cStringIO import StringIO
 from UserDict import UserDict
@@ -1347,3 +1351,64 @@
         if mm_cfg.DEFAULT_SERVER_LANGUAGE not in langs:
             langs.append(mm_cfg.DEFAULT_SERVER_LANGUAGE)
         return langs
+
+
+
+#
+# Added at University of Wollongong by Peter Gray ([EMAIL PROTECTED])
+#
+# The idea here is that addresses of the form [EMAIL PROTECTED]
+# are actually other mailman lists. The domain must match the
+# domain of the current list.
+ 
+    def expand_sublists(self, old_recipients):
+        """returns an expanded list of the members. (all lowercase)"""
+
+       new_recipients = self.internal_expand_sublists(old_recipients, 0)
+       return new_recipients
+
+    def internal_expand_sublists(self, old_recipients, recursion_depth):
+          
+       dirty = 0
+       
+       recursion_depth = recursion_depth + 1
+
+       if recursion_depth > 50:
+               # Screw you guys, I'm going home.
+               raise Error.MMListError, self.internal_name()
+               
+       new_recipients = []
+       
+       for full_address in old_recipients:
+               if full_address[0] != '+':
+                       new_recipients.append(full_address)
+                       continue
+               
+               s = string.split(full_address, '@')
+               local = s[0][1:]
+               domain = None
+               if len(s) >= 2:
+                       domain = s[1]
+               if domain != self.host_name:
+                       new_recipients.append(full_address)
+                       continue
+
+               try:
+                       sublist = MailList(local, lock=0)
+               except:
+# Do we mail to the address or raise an exception?
+# For the moment, just treat the address as a real one
+                       new_recipients.append(full_address)
+                       continue
+       
+               dirty = 1
+               new_member_list = 
sublist.getMemberCPAddresses(sublist.getRegularMemberKeys() + 
sublist.getDigestMemberKeys())
+
+               for new_member in new_member_list:
+                       new_recipients.append(new_member)
+
+       if not dirty: return new_recipients
+       return self.internal_expand_sublists(new_recipients, recursion_depth)
+
+# End local additions
+
Index: Mailman/Handlers/Moderate.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Moderate.py,v
retrieving revision 2.13
diff -u -r2.13 Moderate.py
--- Mailman/Handlers/Moderate.py        31 Dec 2002 03:28:41 -0000      2.13
+++ Mailman/Handlers/Moderate.py        13 Mar 2003 16:27:41 -0000
@@ -87,15 +87,15 @@
     else:
         sender = msg.get_sender()
     # From here on out, we're dealing with non-members.
-    if matches_p(sender, mlist.accept_these_nonmembers):
+    if matches_p(sender, mlist.expand_sublists(mlist.accept_these_nonmembers)):
         return
-    if matches_p(sender, mlist.hold_these_nonmembers):
+    if matches_p(sender, mlist.expand_sublists(mlist.hold_these_nonmembers)):
         Hold.hold_for_approval(mlist, msg, msgdata, Hold.NonMemberPost)
         # No return
-    if matches_p(sender, mlist.reject_these_nonmembers):
+    if matches_p(sender, mlist.expand_sublists(mlist.reject_these_nonmembers)):
         do_reject(mlist)
         # No return
-    if matches_p(sender, mlist.discard_these_nonmembers):
+    if matches_p(sender, mlist.expand_sublists(mlist.discard_these_nonmembers)):
         do_discard(mlist, msg)
         # No return
     # Okay, so the sender wasn't specified explicitly by any of the non-member
_______________________________________________
Mailman-Developers mailing list
[EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/mailman-developers

Reply via email to