aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL29
-rw-r--r--README2
-rw-r--r--TODO12
-rw-r--r--changelog.Debian248
-rw-r--r--cleanup_failing.patch113
-rw-r--r--mail2news.py71
-rw-r--r--news2mail.py71
-rw-r--r--pyginfo.py26
-rwxr-xr-xpygm2n9
-rwxr-xr-xpygn2m9
-rw-r--r--setup.py14
-rwxr-xr-xtest/test_wlp.py11
-rw-r--r--whitelist.py40
13 files changed, 94 insertions, 561 deletions
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 599a64d..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,29 +0,0 @@
-For debian user:
-
-Make package as usual:
-
-$ dpkg-buildpackage -uc -us -rfakeroot
-and install .deb file made.
-
-
-
-
-For non debian user only:
-
-Simply run make:
-
-$ make
-
-and install file where you want:
-Something like:
-
-$ install -m 0755 -d /usr/local/lib/pyg
-to create /usr/local/lib/pyg with right permissions
-
-$ make install DESTDIR=/usr/local
-to install file in /usr/local as basedir
-/usr/local/sbin pygs (pyg frontend)
-/usr/local/lib/pyg *.py *.so (module classes)
-
-You may install manually documentation and examples in examples/ dir in
-/usr/local/share/doc or where you wish.
diff --git a/README b/README
index 2302224..dabb927 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@ List of file:
mail2news.py mail to news python class module
news2mail.py news to mail python class module
-pyginfo.py info about pygs python class module
+setup.py setup script
pygm2n mail to news gateway frontend
pygn2m news to mail gateway frontend
whitelist.py whitelist managing python class module
diff --git a/TODO b/TODO
deleted file mode 100644
index 469ee36..0000000
--- a/TODO
+++ /dev/null
@@ -1,12 +0,0 @@
-pygm2n:
-
-Handle better socket errors (try: in sendemail)
-Let choose if remove (let server generate it), regenerete or leave Message-ID
-Post to many server (server list)? maybe.
-reads NNTPHOST environ var to set default host.
-
-
-both:
-
-try: for open() in readfile()
-finish to write HOWTO
diff --git a/changelog.Debian b/changelog.Debian
deleted file mode 100644
index f53d92d..0000000
--- a/changelog.Debian
+++ /dev/null
@@ -1,248 +0,0 @@
-pyg (0.9.8ubuntu2) raring; urgency=low
-
- * Fix build failure with python in multiarch location.
-
- -- Matthias Klose <doko@ubuntu.com> Mon, 08 Apr 2013 18:40:05 +0200
-
-pyg (0.9.8ubuntu1) raring; urgency=low
-
- * Merge from Debian unstable. Remaining changes:
- - adapt /wlp/C/Makefile for multiarched libfl.a
- - include required string.h in wlp/C/commands.l
-
- -- Logan Rosen <logatronico@gmail.com> Mon, 26 Nov 2012 17:28:37 -0500
-
-pyg (0.9.8) unstable; urgency=low
-
- * Added string.h to avoid implicit declarations in yacc definitions.
- Closes: #689349
- * Remove some compile-time warning from wlp/C/wlp.c
- * not ignore errors in clean targets on all Makefile
- * debian/compat bump to 5 (higher should be tested)
- * use dh_python2
-
- -- Cosimo Alfarano <kalfa@debian.org> Tue, 02 Oct 2012 14:04:01 +0100
-
-pyg (0.9.7ubuntu1) quantal; urgency=low
-
- * adapt /wlp/C/Makefile for multiarched libfl.a
- * include required string.h in wlp/C/commands.{l,y}
-
- -- Julian Taylor <jtaylor@ubuntu.com> Mon, 01 Oct 2012 21:10:48 +0200
-
-pyg (0.9.7) unstable; urgency=low
-
- * Added maildrop as a possible deps (Closes: #385771)
- * Typos fixed in HOWTO.
- * Creating md5sum control file
-
- -- Cosimo Alfarano <kalfa@debian.org> Fri, 18 Jul 2008 13:35:57 -0400
-
-pyg (0.9.6-4.2) unstable; urgency=high
-
- * Non-maintainer upload.
- * Add BLDSHARED to Makefile.pre.in for python2.5 compatibility.
- Closes: #476160
- * Add shlibs:Depends in debian/control.
-
- -- Thomas Viehmann <tv@beamnet.de> Sun, 20 Apr 2008 16:49:23 +0200
-
-pyg (0.9.6-4.1) unstable; urgency=low
-
- * Non-maintainer upload.
- * Update package to the last python policy (Closes: #380905).
- * Bump DH_COMPAT to 4.
- * Bump Standards-Version to 3.7.2.
-
- -- Pierre Habouzit <madcoder@debian.org> Sat, 12 Aug 2006 14:01:38 +0200
-
-pyg (0.9.6-4) unstable; urgency=low
-
- * added some more header to be stripepd in mail2news class
- closes:Bug#165322
-
- -- Cosimo Alfarano <kalfa@debian.org> Tue, 2 Mar 2004 21:40:59 +0100
-
-pyg (0.9.6-3.1) unstable; urgency=low
-
- * apply the full (not modified) version of the Matt's patch, for
- compatibility reasons
-
- -- Cosimo Alfarano <kalfa@debian.org> Thu, 6 Nov 2003 23:46:31 +0100
-
-pyg (0.9.6-3) unstable; urgency=low
-
- * applied a modified version of patch from Matt Kraai sent in BTS
- closes:Bug#213936
-
- -- Cosimo Alfarano <kalfa@debian.org> Wed, 5 Nov 2003 11:59:29 +0100
-
-pyg (0.9.6-2) unstable; urgency=low
-
- * typos in debian/control fixed (closes: #125276)
-
- -- Cosimo Alfarano <kalfa@debian.org> Sat, 6 Apr 2002 18:52:57 +0200
-
-pyg (0.9.6-1) unstable; urgency=low
-
- * minor changes to mail2news.py sendemail() method
- now does str(msg) on exception
- * addedd support for void header ('Cc: \n\r') even if it is not fully rfc
- conform.
- * addedd support for multiline header of the form
- "Received: \n\r<text>" (closes: #124396)
- * fixed helo hostname sent, now it's the box name
- (closes: #122851)
- * sorry for the long fixing time, to everyone was waiting for them.
-
- -- Cosimo Alfarano <kalfa@debian.org> Wed, 3 Apr 2002 22:39:47 +0200
-
-pyg (0.9.5-1) unstable; urgency=low
-
- * compiled against python2.1 (wlp.c)
- * debian/control updated for dependancies
- python (>= 2.1), I want it to be usable on any 2.X
- the same for python-dev (closes: #119202)
-
- -- Cosimo Alfarano <kalfa@debian.org> Mon, 12 Nov 2001 22:17:28 +0100
-
-pyg (0.9.4-7) unstable; urgency=low
-
- * fixed some typos
- * fixed import of getopt module (thanks to zack@debian.org)
- * inverted 'if' and 'else' in line 78 of mail2news.py
- that's not a bug, but I do it for readability closes: #105922
-
- -- Cosimo Alfarano <kalfa@debian.org> Fri, 20 Jul 2001 00:49:26 +0200
-
-pyg (0.9.4-6) unstable; urgency=low
-
- * added -P port option to pygm2n
-
- -- Cosimo Alfarano <kalfa@debian.org> Sun, 11 Feb 2001 22:09:03 +0100
-
-pyg (0.9.4-5) unstable; urgency=low
-
- * added suport for NNTP auth (thanks to Marc Sherman for his patch) closes: #84809
-
- -- Cosimo Alfarano <kalfa@debian.org> Sun, 11 Feb 2001 16:43:09 +0100
-
-pyg (0.9.4-4) unstable; urgency=low
-
- * moved files from /usr/sbin to /usr/bin closes: #84806
- * changed Maintainer: filed to kalfa@debian.org addr
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 04 Feb 2000 18:50:00 +0100
-
-pyg (0.9.4-3) unstable; urgency=low
-
- * Sponsored upload.
- * fixed getopt problem with -M
-
- -- Davide Puricelli (evo) <evo@debian.org> Sun, 30 Sep 2000 21:50:00 +0200
-
-pyg (0.9.4-2) unstable; urgency=low
-
- * added Approved: header (pygm2n)
- * added selection of smtpserver for relay (pygn2m)
- * added conversion from In-Reply-To: to References: (pygm2n)
- * added Suggests: news-transport-system , mail-transport-agent
- * removed NNTP-Posting-Host, X-Trace
- * added TODO file
- * mail to news is working fine.
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 30 Sep 2000 21:50:00 +0200
-
-pyg (0.9.4-1) unstable; urgency=low
-
- * Sponsored upload.
- * New upstream version.
- * mail to news gateway is working. Anyway testing it is adviced before use.
-
- -- Davide Puricelli (evo) <evo@debian.org> Mon, 18 Sep 2000 19:45:19 +0200
-
-pyg (0.9.3-1) unstable; urgency=low
-
- * started to write mail to news gateway module
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sat, 16 Sep 2000 17:30:00 +0200
-
-pyg (0.9.2-3) unstable; urgency=low
-
- * Sponsored upload.
- * Swapped binary-{indep,arch} in debian/rules, closes: #71446.
- * Added flex and bison to Build-Depends.
-
- -- Davide Puricelli (evo) <evo@debian.org> Thu, 14 Sep 2000 16:34:10 +0200
-
-pyg (0.9.2-2) unstable; urgency=low
-
- * debian/rules rewritten to a more readble dh_make style.
- * moved example files from debian/ to exaples/
- * dh_stripped *.so
- * dh_undocumented *.py
- * Sponsored upload for Cosimo Alfarano <alfarano@students.cs.unibo.it>
- * Initial Debian release.
-
- -- Davide Puricelli (evo) <evo@debian.org> Sat, 2 Sep 2000 22:35:25 +0200
-
-pyg (0.9.2-1) unstable; urgency=low
-
- * written the whitelist parser (wlp) in yacc+flex
- * written C funtions as python built-in module for wlp
- * fixed parsecommandline() return object
- * added -T opt for test mode and -V for verbose output
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 23 Jul 2000 19:30:00 +0200
-
-pyg (0.9.1-5) unstable; urgency=low
-
- * added file locking on log
- * modified default location of whitelist and log file to homedir.
- log file will moved to /var/log as soon as possible
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 03 Jul 2000 18:00:00 +0200
-
-pyg (0.9.1-4) unstable; urgency=low
-
- * Added Message-Id: logging in whitelist
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 02 Jul 2000 18:30:00 +0200
-
-pyg (0.9.1-3) unstable; urgency=low
-
- * removed Sender: header from nntp article. It is usually set to news@news.domain
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Thu, 29 Jun 2000 16:30:00 +0200
-
-pyg (0.9.1-2) unstable; urgency=low
-
- * modified copyright note in sources
- * moved parse_cmdline() from news2mail.py to pygs
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Thu, 29 Jun 2000 02:30:00 +0200
-
-pyg (0.9.1-1) unstable; urgency=low
-
- * enriched whitelist log system
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Thu, 29 Jun 2000 01:30:00 +0200
-
-pyg (0.9-3) unstable; urgency=low
-
- * corrected load path for modules in pygs. now points to /usr/lib/pyg
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Wed, 28 Jun 2000 00:45:00 +0200
-
-pyg (0.9-2) unstable; urgency=low
-
- * added basic (and rudimental) whitelist functionality (whitelist.py)
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Wed, 28 Jun 2000 00:05:00 +0200
-
-pyg (0.9-1) unstable; urgency=low
-
- * Initial release.
-
- -- Cosimo Alfarano <alfarano@students.cs.unibo.it> Sun, 25 Jun 2000 17:52:35 +0200
-
diff --git a/cleanup_failing.patch b/cleanup_failing.patch
deleted file mode 100644
index d7d049f..0000000
--- a/cleanup_failing.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-diff --git b/mail2news.py a/mail2news.py
-index e7cbcf9..412e4ee 100644
---- b/mail2news.py
-+++ a/mail2news.py
-@@ -24,80 +28,41 @@ import pyginfo
-
- class mail2news:
- """news to mail gateway class"""
--
- reader = None # mode reader
--# newsgroups = None # Newsgroups: local.test,local.moderated...
--# approved = None # Approved: kame@aragorn.lorien.org
- newsserver = 'localhost' # no comment :)
- port = 119
- user = None
- password = None
-
-+# """phase 3:
-+# format rfc 822 headers from input article
-+# """
-+#
-+# m2n.mergeheads() # make unique dict from NNTP and SMTP dicts
-+#
-+# m2n.addheads() # add some important heads
-+# m2n.renameheads() # rename useless heads
-+# m2n.removeheads() # remove other heads
-+#
-+# m2n.sortheads() # sort remaining heads :)
-+#
-+# if opt.verbose:
-+# for line in m2n.headers:
-+# print line[:-1]
-
-@@ -142,14 +108,11 @@ class mail2news:
-
- self.heads_dict = {}
-
-- try:
-- for header in self.smtpheads.keys(): # fill it w/ smtp old heads
-- self.heads_dict[header] = self.smtpheads[header]
--
-- # and replace them w/ nntp new heads
-- for header in self.nntpheads.keys():
-- self.heads_dict[header] = self.nntpheads[header]
-+ # FIXME something like a = set() ; a = self.message.items() ?
-
-+ try:
-+ for header in self.message.keys(): # fill it w/ smtp old heads
-+ self.heads_dict[header] = self.message[header]
- except KeyError, message:
- print message
-
-
-@@ -236,51 +166,32 @@ class mail2news:
- def removeheads(self, heads=None):
- """remove headers like Xref: Path: Lines:
- """
--
-- try:
- # removing some others useless headers .... (From is not From:)
-
- rmheads = ['Received:', 'From', 'NNTP-Posting-Host:',
- 'X-Trace:', 'X-Compliants-To:', 'NNTP-Posting-Date:']
-- if(heads):
-+ if heads:
- rmheads.append(heads)
-
- for head in rmheads:
-- if head in self.heads_dict:
-- del self.heads_dict[head]
--
--# if 'From' in self.heads_dict: # neither 'From ' nor 'From:'
--# del self.heads_dict['From']
--
--# # neither 'From ' nor 'From:'
--# if 'NNTP-Posting-Host:' in self.heads_dict:
--# del self.heads_dict['']
--
--# if 'Lines:' in self.heads_dict:
--# del self.heads_dict['Lines:']
-+ if head in self.message:
-+ del self.message[head]
-
-- # it is usually set by INN, if ng is moderated...
--# if 'Sender:' in self.heads_dict:
--# del self.heads_dict['Sender:']
--
-- if 'Message-id:' in self.heads_dict:
-+ # FIXME the following lines are buggy, because they don't expect
-+ # the header 'Message-Id' being already present
-+ if 'Message-id:' in self.message:
- self.heads_dict['Message-Id:'] = self.heads_dict['Message-id:']
- del(self.heads_dict['Message-id:'])
-
-- if 'Message-ID:' in self.heads_dict:
-+ if 'Message-ID:' in self.message:
- self.heads_dict['Message-Id:'] = self.heads_dict['Message-ID:']
- del(self.heads_dict['Message-ID:'])
-
- # If message-id is not present, I generate it
-- if 'Message-Id:' not in self.heads_dict:
-+ if 'Message-Id:' not in self.message:
- msgid = '<pyg.%d@tuchailepuppapera.org>\n' % (getpid())
- self.heads_dict['Message-Id:'] = msgid
-
-- except KeyError, message:
-- print message
--
-- return self.heads_dict
--
- def sendemail(self):
- """Talk to NNTP server and try to send email."""
- try:
diff --git a/mail2news.py b/mail2news.py
index f802277..88c53ea 100644
--- a/mail2news.py
+++ b/mail2news.py
@@ -14,17 +14,22 @@ Gets news email and sends it via SMTP.
class mail2news is hopefully conform to rfc850.
"""
+from collections import OrderedDict
import email
import logging
-#logging.basicConfig(level=logging.DEBUG)
import nntplib
from os import getpid
from re import findall
-from collections import OrderedDict
from socket import gethostbyaddr, gethostname
import sys
-import pyginfo
+
+#logging.basicConfig(level=logging.DEBUG)
+# This is the single source of Truth
+# Yes, it is awkward to have it assymetrically here
+# and not in news2mail as well.
+VERSION = '0.9.9'
+DESC = "The Python Gateway Script: news2mail mail2news gateway"
class mail2news:
@@ -57,7 +62,6 @@ class mail2news:
# introduce nntpheads
if opt.newsgroup != '':
- # TODO put it directly to self.message when we have it
self.nntpheads['Newsgroups'] = opt.newsgroup
if opt.approver != '':
self.nntpheads['Approved'] = opt.approver
@@ -66,7 +70,8 @@ class mail2news:
@staticmethod
def puthead(from_dict, out_list, key):
- """private, x-form dict entries in out_list entries"""
+ """private, x-form dict entries in out_list entries
+ """
if key in from_dict:
out_list.append(key + ': ' + from_dict.get(key))
else:
@@ -77,35 +82,8 @@ class mail2news:
"""make a unique headers dictionary from NNTP and SMTP
single headers dictionaries."""
- self.heads_dict = OrderedDict()
- logging.debug('self.message.keys() = %s', self.message.keys())
-
- try:
- for header in self.message.keys(): # fill it w/ smtp old heads
- self.heads_dict[header] = self.message[header]
-
- # and replace them w/ nntp new heads
- for header in self.nntpheads.keys():
- self.heads_dict[header] = self.nntpheads[header]
-
- except KeyError, message:
- print message
-
- return self.heads_dict
-
- def addheads(self):
- """add new header like X-Gateway:
- """
-
- info = pyginfo.pygsinfo()
-
- try:
- self.heads_dict['X-Gateway'] = info.PROGNAME + ' ' + \
- info.PROGDESC + ' - Mail to News'
-
- except KeyError, message:
- print message
-
+ self.heads_dict = OrderedDict(self.message)
+ self.heads_dict.update(self.nntpheads)
return self.heads_dict
def renameheads(self):
@@ -160,18 +138,21 @@ class mail2news:
if head in self.heads_dict:
del self.heads_dict[head]
- if 'Message-id' in self.heads_dict:
- self.heads_dict['Message-Id'] = self.heads_dict['Message-id']
- del(self.heads_dict['Message-id'])
-
- if 'Message-ID' in self.heads_dict:
- self.heads_dict['Message-Id'] = self.heads_dict['Message-ID']
- del(self.heads_dict['Message-ID'])
-
- # If message-id is not present, I generate it
if 'Message-Id' not in self.heads_dict:
- msgid = '<pyg.%d@tuchailepuppapera.org>\n' % (getpid())
- self.heads_dict['Message-Id'] = msgid
+ if 'Message-id' in self.heads_dict:
+ self.heads_dict['Message-Id'] = \
+ self.heads_dict['Message-id']
+ del(self.heads_dict['Message-id'])
+
+ if 'Message-ID' in self.heads_dict:
+ self.heads_dict['Message-Id'] = \
+ self.heads_dict['Message-ID']
+ del(self.heads_dict['Message-ID'])
+
+ # If message-id is not present, I generate it
+ if 'Message-Id' not in self.heads_dict:
+ msgid = '<pyg.%d@tuchailepuppapera.org>\n' % (getpid())
+ self.heads_dict['Message-Id'] = msgid
except KeyError, message:
print message
diff --git a/news2mail.py b/news2mail.py
index e1909a1..71e0d17 100644
--- a/news2mail.py
+++ b/news2mail.py
@@ -22,17 +22,18 @@ normal (what pygs does) operations flow is:
Date:, normal headers ending with X-* and Resent-* headers.
"""
+from collections import OrderedDict
import email
import logging
-from collections import OrderedDict
-# logging.basicConfig(level=logging.DEBUG)
-import sys
import smtplib
-import time
from socket import gethostbyaddr, gethostname
-import pyginfo
+import sys
+import time
+
+from mail2news import VERSION, DESC
+# logging.basicConfig(level=logging.DEBUG)
class news2mail(object):
"""news to mail gateway class"""
@@ -55,8 +56,7 @@ class news2mail(object):
def readfile(self):
self.message = email.message_from_file(sys.stdin)
- self.nntpheads = dict(((key, value)
- for (key, value) in self.message.items()))
+ self.nntpheads = OrderedDict(self.message)
@staticmethod
def puthead(from_dict, out_list, key):
@@ -97,18 +97,8 @@ class news2mail(object):
"""make a unique headers dictionary from NNTP and SMTP
single headers dictionaries."""
- self.heads_dict = OrderedDict()
-
- try:
- for header in self.nntpheads.keys(): # fill it w/ nntp old heads
- self.heads_dict[header] = self.nntpheads[header]
-
- # and replace them w/ smtp new heads
- for header in self.smtpheads.keys():
- self.heads_dict[header] = self.smtpheads[header]
-
- except KeyError, message:
- print message
+ self.heads_dict = OrderedDict(self.nntpheads)
+ self.heads_dict.update(self.smtpheads)
return self.heads_dict
@@ -116,37 +106,28 @@ class news2mail(object):
"""add new header like X-Gateway: Received:
"""
- info = pyginfo.pygsinfo()
-
- try:
- self.heads_dict['X-Gateway'] = info.PROGNAME + ' ' + \
- info.__doc__ + '\n'
-
- ##self.heads_dict['X-Gateway'] = '%s %s\n' %
- ## (info.PROGNAME, info.__doc__)
+ self.heads_dict['X-Gateway'] = 'pyg {0} {1}'.format(VERSION, DESC)
- # to make Received: header
- t = time.ctime(time.time())
+ # to make Received: header
+ t = time.ctime(time.time())
- if time.daylight:
- tzone = time.tzname[1]
- else:
- tzone = time.tzname[0]
+ if time.daylight:
+ tzone = time.tzname[1]
+ else:
+ tzone = time.tzname[0]
- # An exemple from debian-italian:
- # Received: from murphy.debian.org (murphy.debian.org [216.234.231.6])
- # by smv04.iname.net (8.9.3/8.9.1SMV2) with SMTP id JAA26407
- # for <kame.primo@innocent.com> sent by
- # <debian-italian-request@lists.debian.org
+ # An example from debian-italian:
+ # Received: from murphy.debian.org (murphy.debian.org [216.234.231.6])
+ # by smv04.iname.net (8.9.3/8.9.1SMV2) with SMTP id JAA26407
+ # for <kame.primo@innocent.com> sent by
+ # <debian-italian-request@lists.debian.org
- tmp = 'from GATEWAY by ' + self.hostname + \
- ' with ' + info.PROGNAME + \
- '\n\tfor <' + self.rcpt + '> ; ' + \
- t + ' (' + tzone + ')\n'
+ tmp = 'from GATEWAY by ' + self.hostname + \
+ ' with pyg' + \
+ '\n\tfor <' + self.rcpt + '> ; ' + \
+ t + ' (' + tzone + ')\n'
- self.heads_dict['Received'] = tmp
- except KeyError, message:
- print message
+ self.heads_dict['Received'] = tmp
return self.heads_dict
diff --git a/pyginfo.py b/pyginfo.py
deleted file mode 100644
index a9a0bfa..0000000
--- a/pyginfo.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""News to mail gateway script. Copyright 2000 Cosimo Alfarano
-
-Author: Cosimo Alfarano
-Date: June 11 2000
-
-pyginfo.py - Copyright 2000 by Cosimo Alfarano <Alfarano@Students.CS.UniBo.It>
-You can use this software under the terms of the GPL. If we meet some day,
-and you think this stuff is worth it, you can buy me a beer in return.
-
-Thanks to md for this useful formula. Beer is beer.
-
-
-Gets news article and sends it via SMTP.
-"""
-
-
-class pygsinfo:
- """The Python Gateway Script: news2mail mail2news gateway"""
-
- PROGNAME = 'pyg'
- PROGDESC= 'The Python Gateway'
-
- MAJOR = '0'
- MINOR = '7b'
- VERSION = MAJOR + '.' + MINOR
-
diff --git a/pygm2n b/pygm2n
index 51869b3..2dcd21e 100755
--- a/pygm2n
+++ b/pygm2n
@@ -15,22 +15,20 @@ Gets news article and sends it via SMTP.
"""
from __future__ import print_function
-import logging
import sys
+
import argparse
import mail2news
-import pyginfo
sys.path.append('/usr/lib/pyg')
def parse_cmdline():
- i = pyginfo.pygsinfo()
parser = argparse.ArgumentParser(
description='%s version %s - Copyright 2000 Cosimo Alfarano\n%s' %
- (i.PROGNAME, i.VERSION, i.__doc__))
+ ('pyg', mail2news.VERSION, mail2news.DESC))
parser.add_argument('-s', '--newsserver', default='')
parser.add_argument('-a', '--approver', default='',
@@ -97,7 +95,8 @@ try:
m2n.mergeheads() # make unique dict from NNTP and SMTP dicts
- m2n.addheads() # add some important heads
+ m2n.heads_dict['X-Gateway'] = 'pyg {0} {1}'.format(
+ mail2news.VERSION, mail2news.DESC)
m2n.renameheads() # rename useless heads
m2n.removeheads() # remove other heads
diff --git a/pygn2m b/pygn2m
index 14bb1e9..4acd2f2 100755
--- a/pygn2m
+++ b/pygn2m
@@ -20,9 +20,9 @@ import argparse
sys.path.append('/usr/lib/pyg')
-import pyginfo
import whitelist
import news2mail
+from mail2news import VERSION, DESC
def parse_cmdline():
@@ -30,10 +30,9 @@ def parse_cmdline():
set a dictionary with smtp new header in gw parameter (gw.smtpheads)
return (test,verbose) boolean tuple
"""
- i = pyginfo.pygsinfo()
parser = argparse.ArgumentParser(
- description='%s version %s - Copyright 2000 Cosimo Alfarano\n%s' %
- (i.PROGNAME, i.VERSION, i.__doc__))
+ description='pyg version %s - Copyright 2000 Cosimo Alfarano\n%s' %
+ (VERSION, DESC))
parser.add_argument('-H', '--smtpserver', default='')
parser.add_argument('-s', '--sender', required=True, default='')
@@ -42,8 +41,6 @@ def parse_cmdline():
parser.add_argument('-w', '--wlfile')
parser.add_argument('-l', '--logfile')
- # TODO eventually we should refactor these to be Boolean
- # and use store_true
parser.add_argument('-T', '--test',
help='test mode (not send article via SMTP)',
action='store_true')
diff --git a/setup.py b/setup.py
index 33c9261..99fa20e 100644
--- a/setup.py
+++ b/setup.py
@@ -1,9 +1,12 @@
#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from __future__ import print_function
import unittest
import sys
from distutils.core import setup, Extension, Command
from distutils.command.build_ext import build_ext
from subprocess import check_call
+from mail2news import VERSION, DESC
class RunTests(Command):
@@ -49,11 +52,12 @@ wlp_module = Extension('wlp',
'wlp/commands.tab.c',
'wlp/lex.yy.c'])
+
setup(name='pyg',
- version='0.9.9', # the current Debian version is 0.9.8
- author="Cosimo Alfarano",
- author_email="kalfa@debian.org", # FIXME I am an contributor?
- description='Python Mail <-> News Gateway',
+ version=VERSION, # the current Debian version is 0.9.8
+ author="Cosimo Alfarano, Matej Cepl",
+ author_email="kalfa@debian.org, mcepl@cepl.eu",
+ description=DESC,
long_description='''
Python Gateway Script from news to mail and vice versa.
@@ -73,7 +77,7 @@ setup(name='pyg',
It refers to rfc 822 (mail) and 850 (news).
''',
- py_modules=['mail2news', 'news2mail', 'pyginfo', 'setup', 'whitelist'],
+ py_modules=['mail2news', 'news2mail', 'setup', 'whitelist'],
ext_modules=[wlp_module],
scripts=['pygm2n', 'pygn2m'],
cmdclass={'build_ext': Build_WLP_ext,
diff --git a/test/test_wlp.py b/test/test_wlp.py
index 486fb42..62b2551 100755
--- a/test/test_wlp.py
+++ b/test/test_wlp.py
@@ -8,6 +8,7 @@ import os
import os.path
import subprocess
import re
+import mail2news
def distutils_dir_name(dname):
@@ -52,15 +53,15 @@ Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
User-Agent: Mutt/1.2.5i
X-Multiline: this header probably broke RFC, but is frequent.
-X-Gateway: pyg The Python Gateway - Mail to News
-"""
+X-Gateway: pyg %s %s
+""" % (mail2news.VERSION, mail2news.DESC)
def test_m2n(self):
with open('examples/mail') as in_mail:
pid = subprocess.Popen(['./pygm2n', '-TV', '-n', 'pyg.test'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
- out, err = pid.communicate(in_mail.read())
+ out, _ = pid.communicate(in_mail.read())
self.assertEqual(out, self.expected_output)
@@ -78,11 +79,11 @@ Mime-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Trace: pyg.server.tld 960672047 927 192.168.1.2 (10 Jun 2000 21:20:47 GMT)
X-Newsgroups: local.moderated
-X-Gateway: pyg The Python Gateway Script: news2mail mail2news gateway
+X-Gateway: pyg %s %s
X-NNTP-Posting-Host: pyg.server.tld
Resent-From: sender@example.com
Resent-Sender: sender@example.com
-"""
+""" % (mail2news.VERSION, mail2news.DESC)
def test_n2m(self):
env = os.environ
diff --git a/whitelist.py b/whitelist.py
index c017402..ea3f646 100644
--- a/whitelist.py
+++ b/whitelist.py
@@ -27,7 +27,7 @@ class whitelist(object):
wl = {}
debug = None
- log = None # filedescriptor
+ logf = None # filedescriptor
# constants
DENY = 0
@@ -52,18 +52,18 @@ class whitelist(object):
# print '%s: %s = %s' % (owner,option,self.wl[owner][option])
try:
- self.log = open(logfile, 'a')
+ self.logf = open(logfile, 'a')
self.lock()
except (Exception), message:
print '%s\nAre you authorized to use this program? ' % message
sys.exit(1)
def lock(self):
- fcntl.flock(self.log.fileno(), fcntl.LOCK_EX)
+ fcntl.flock(self.logf.fileno(), fcntl.LOCK_EX)
# to unlock fd locked, usually fd are unlocked after process exit()
def unlock(self):
- fcntl.flock(self.log.fileno(), fcntl.LOCK_UN)
+ fcntl.flock(self.logf.fileno(), fcntl.LOCK_UN)
def checkfrom(self, fromhead):
"""have you permission to be here, sir?"""
@@ -78,14 +78,12 @@ class whitelist(object):
else:
return None
- # FIXME self.log has been already defined as a variable of None value on
- # line 30.
def log(self, string):
"""Captain Diary, Astral Date 962555394 from epoch.
it rawly write a line in logfile. Remeber to indent it, if you
like.
"""
- self.log.write(string + '\n')
+ self.logf.write(string + '\n')
def logmsg(self, heads, ok=DENY, owner=None):
"""who are walking through my gate?
@@ -100,33 +98,33 @@ class whitelist(object):
tzone = time.tzname[0]
if ok == self.ACCEPT:
- self.log.write('Permission Accorded ')
+ self.logf.write('Permission Accorded ')
else:
- self.log.write('Permission Denied ')
+ self.logf.write('Permission Denied ')
- self.log.write('at %s (%s)\n' % (ltime, tzone))
+ self.logf.write('at %s (%s)\n' % (ltime, tzone))
if owner is not None:
- self.log.write('\tWLOwner: ' + owner + '\n')
- self.log.write('\tFrom: ' + heads.get('From', 'NOT PRESENT\n'))
- self.log.write('\tSubject: ' + heads.get('Subject', 'NOT PRESENT\n'))
- self.log.write('\tSender: ' + heads.get('Sender', 'NOT PRESENT\n'))
- self.log.write('\tDate: ' + heads.get('Date', 'NOT PRESENT\n'))
+ self.logf.write('\tWLOwner: ' + owner + '\n')
+ self.logf.write('\tFrom: ' + heads.get('From', 'NOT PRESENT\n'))
+ self.logf.write('\tSubject: ' + heads.get('Subject', 'NOT PRESENT\n'))
+ self.logf.write('\tSender: ' + heads.get('Sender', 'NOT PRESENT\n'))
+ self.logf.write('\tDate: ' + heads.get('Date', 'NOT PRESENT\n'))
# some client create Message-Id other Message-ID.
if 'Message-ID' in heads:
- self.log.write('\tMessage-ID: ' + heads.get('Message-ID'))
+ self.logf.write('\tMessage-ID: ' + heads.get('Message-ID'))
else:
- self.log.write('\tMessage-Id: ' + heads.get('Message-Id',
+ self.logf.write('\tMessage-Id: ' + heads.get('Message-Id',
'NOT PRESENT\n'))
# X-Newsgroups: and To: are present if user is trusted, else
# Newsgroup: exists since no changes on nntp headers are done.
if 'X-Newsgroups' in heads:
- self.log.write('\tTo: ' + heads.get('To', 'NOT PRESENT\n'))
- self.log.write('\tX-Newsgroups: ' + heads.get('X-Newsgroups',
+ self.logf.write('\tTo: ' + heads.get('To', 'NOT PRESENT\n'))
+ self.logf.write('\tX-Newsgroups: ' + heads.get('X-Newsgroups',
'NOT PRESENT\n'))
else:
- self.log.write('\tNewsgroups: ' +
+ self.logf.write('\tNewsgroups: ' +
heads.get('Newsgroups', 'NOT PRESENT\n'))
- self.log.write('\n')
+ self.logf.write('\n')