summaryrefslogtreecommitdiff
path: root/modules/mm_gateway.py
diff options
context:
space:
mode:
Diffstat (limited to 'modules/mm_gateway.py')
-rw-r--r--modules/mm_gateway.py142
1 files changed, 0 insertions, 142 deletions
diff --git a/modules/mm_gateway.py b/modules/mm_gateway.py
deleted file mode 100644
index f26811fcf..000000000
--- a/modules/mm_gateway.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# Copyright (C) 1998 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-'''Mixin class for gatewaying mail to news, and news to mail.'''
-
-ImproperNNTPConfigError = "ImproperNNTPConfigError"
-class GatewayManager:
- def InitVars(self):
- # Configurable
- self.nntp_host = ''
- self.linked_newsgroup = ''
- self.gateway_to_news = 0
- self.gateway_to_mail = 0
-
- def GetConfigInfo(self):
- import mm_cfg
- return [
- 'Mail to news and news to mail gateway services.',
- ('nntp_host', mm_cfg.String, 50, 0,
- 'The internet address of the machine your news server is running on.',
-
- 'The news server is not part of Mailman proper. You have to already'
- ' have access to a nntp server, and that nntp server has to recognize'
- ' the machine this mailing list runs on as a machine capable of'
- ' reading and posting news.'),
- ('linked_newsgroup', mm_cfg.String, 50, 0,
- 'The name of the usenet group to gateway to and/or from.'),
- ('gateway_to_news', mm_cfg.Toggle, ('No', 'Yes'), 0,
- 'Should posts to the mailing list be resent to the newsgroup?'),
- ('gateway_to_mail', mm_cfg.Toggle, ('No', 'Yes'), 0,
- 'Should newsgroup posts not sent from the list be resent to the'
- ' list?')
- ]
-
- # Watermarks are kept externally to avoid locking problems.
- def PollNewsGroup(self, watermark):
- if (not self.gateway_to_mail or not self.nntp_host or
- not self.linked_newsgroup):
- return 0
- import nntplib, os, string, mm_cfg
- con = nntplib.NNTP(self.nntp_host)
- r,c,f,l,n = con.group(self.linked_newsgroup)
- # NEWNEWS is not portable and has synchronization issues...
- # Use a watermark system instead.
- if watermark == 0:
- return eval(l)
- for num in range(max(watermark+1, eval(f)), eval(l)+1):
- try:
- headers = con.head(`num`)[3]
- found_to = 0
- for header in headers:
- i = string.find(header, ':')
- if i > 0 and string.lower(header[:i]) == 'to':
- found_to = 1
- if header[:i] <> 'X-BeenThere':
- continue
- if header[i:] == ': %s' % self.GetListEmail():
- raise "QuickEscape"
- body = con.body(`num`)[3]
- file = os.popen("%s %s nonews" %
- (os.path.join(mm_cfg.SCRIPTS_DIR,
- "post"), self._internal_name), "w")
- file.write(string.join(headers,'\n'))
- # If there wasn't already a TO: header, add one.
- if not found_to:
- file.write("\nTo: %s" % self.GetListEmail())
- file.write('\n\n')
- file.write(string.join(body,'\n'))
- file.write('\n')
- file.close()
- except nntplib.error_temp:
- pass # Probably canceled, etc...
- except "QuickEscape":
- pass # We gated this TO news, don't repost it!
- return eval(l)
-
- def SendMailToNewsGroup(self, mail_msg):
- import mm_message
- import os
- #if self.gateway_to_news == 0:
- # return
- if self.linked_newsgroup == '' or self.nntp_host == '':
- raise ImproperNNTPConfigError
- try:
- if self.tmp_prevent_gate:
- return
- except AttributeError:
- pass # Wasn't remailed by the news gater then. Let it through.
- # Fork in case the nntp connection hangs.
- x = os.fork()
- if not x:
- # Now make the news message...
- msg = mm_message.NewsMessage(mail_msg)
-
- import nntplib,string
-
- # Ok, munge headers, etc.
- subj = msg.getheader('subject')
- if not subj:
- msg.SetHeader('Subject', '%s(no subject)' % prefix)
- if self.reply_goes_to_list:
- del msg['reply-to']
- msg.headers.append('Reply-To: %s\n' % self.GetListEmail())
- msg.headers.append('Sender: %s\n' % self.GetAdminEmail())
- msg.headers.append('Errors-To: %s\n' % self.GetAdminEmail())
- msg.headers.append('X-BeenThere: %s\n' % self.GetListEmail())
- msg.headers.append('Newsgroups: %s\n' % self.linked_newsgroup)
- # Note: Need to be sure 2 messages aren't ever sent to the same
- # list in the same process, since message ID's need to be unique.
- # could make the ID be mm.listname.postnum instead if that happens
- if msg.getheader('Message-ID') == None:
- import time
- msg.headers.append('Message-ID: <mm.%s.%s@%s>\n' %
- (time.time(), os.getpid(), self.host_name))
- if msg.getheader('Lines') == None:
- msg.headers.append('Lines: %s\n' %
- len(string.split(msg.body,"\n")))
- del msg['received']
-
- # NNTP is strict about spaces after the colon in headers.
- for n in range(len(msg.headers)):
- line = msg.headers[n]
- i = string.find(line,":")
- if i <> -1 and line[i+1] <> ' ':
- msg.headers[n] = line[:i+1] + ' ' + line[i+1:]
- con = nntplib.NNTP(self.nntp_host)
- con.post(msg)
- con.quit()
- os._exit(0)