From: Aymeric Augustin Date: Sun, 5 Oct 2008 09:09:51 +0000 (+0200) Subject: Rename to match convention in the tools directory X-Git-Url: http://git.madism.org/?p=apps%2Fpfixtools.git;a=commitdiff_plain;h=ceecb2a293677667d8b099b0b32fd4adcdb22e7d Rename to match convention in the tools directory --- diff --git a/tools/postgrey2postlicyd b/tools/postgrey2postlicyd new file mode 100755 index 0000000..2c50b74 --- /dev/null +++ b/tools/postgrey2postlicyd @@ -0,0 +1,112 @@ +#!/usr/bin/env python +############################################################################## +# pfixtools: a collection of postfix related tools # +# ~~~~~~~~~ # +# ________________________________________________________________________ # +# # +# Redistribution and use in source and binary forms, with or without # +# modification, are permitted provided that the following conditions # +# are met: # +# # +# 1. Redistributions of source code must retain the above copyright # +# notice, this list of conditions and the following disclaimer. # +# 2. Redistributions in binary form must reproduce the above copyright # +# notice, this list of conditions and the following disclaimer in the # +# documentation and/or other materials provided with the distribution. # +# 3. The names of its contributors may not be used to endorse or promote # +# products derived from this software without specific prior written # +# permission. # +# # +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS # +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF # +# THE POSSIBILITY OF SUCH DAMAGE. # +############################################################################## + +# Copyright (c) 2008 Aymeric Augustin + + +# Convert the postgrey_whitelist_clients file to a format +# suitable for use with the postlicyd Postfix policy daemon + + +import os, re, sys + +def process(infile, outfile): + + # Write headers + file.write("# Do not edit, file autogenerated by %s\n" % sys.argv[0]) + if len(sys.argv) > 1 and sys.argv[1] != '-': + file.write("# This file has been generated from %s\n" % sys.argv[1]) + + re_domain_name = re.compile(r'[a-z0-9.\-]+\.[a-z]+') + re_ip_address = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') + + # Store each entry to avoid duplicates + entries = [] + + for line in infile: + # Comments: keep them + if line == '\n' or line[0] == '#': + outfile.write(line) + # IP addresses: keep as is + elif re_ip_address.match(line): + outfile.write(line) + # Regexps: extract final constant part + elif line[0] == '/': + line = line.rstrip(r'$/').replace(r'\.', r'.') + host = re_domain_name.findall(line)[-1] + result = host + '\n' + if result not in entries: + entries.append(result) + outfile.write(result) + # Domain names: prepend a dot if the domain name contains only one dot + elif re_domain_name.match(line): + if line.count('.') < 2: + result = '.' + line + else: + result = line + if result not in entries: + entries.append(result) + outfile.write(result) + # Unrecognized: report on stderr and comment in output + else: + outfile.write('# IGNORED: ' + line) + sys.stderr.write("Couldn't process line: %s" % line) + + +if __name__ == '__main__': + + # Check number of arguments + if len(sys.argv) > 3: + print "Usage: %s [input] [output]" % sys.argv[0] + print "If input/output is omitted or -, stdin/stdout is used." + sys.exit(1) + + # Parse first argument + if len(sys.argv) > 1 and sys.argv[1] != '-': + infile = open(sys.argv[1], 'r') + else: + infile = sys.stdin + + # Parse second argument + if len(sys.argv) > 2 and sys.argv[2] != '-': + if sys.argv[1] == sys.argv[2]: + print "Source file and destination file are identical, aborting" + sys.exit(1) + if os.path.exists(sys.argv[2]): + print "Destination file %s already exists, aborting" % sys.argv[2] + sys.exit(1) + outfile = open(sys.argv[2], 'w') + else: + outfile = sys.stdout + + # Do the processing + process(infile, outfile) diff --git a/tools/postgrey_to_postlicyd.py b/tools/postgrey_to_postlicyd.py deleted file mode 100644 index 53a5930..0000000 --- a/tools/postgrey_to_postlicyd.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# Convert the postgrey_whitelist_clients file to a format -# suitable for use with the postlicyd Postfix policy daemon - -# Copyright © 2008 Aymeric Augustin -# Released under the GPL - -import os, re, sys - - -def process(infile, outfile): - - re_domain_name = re.compile(r'[a-z0-9.\-]+\.[a-z]+') - re_ip_address = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') - - outfile.write('# Automatically converted for use by postlicyd\n\n') - - # Store each entry to avoid duplicates - entries = [] - - for line in infile: - # Comments: keep them - if line == '\n' or line[0] == '#': - outfile.write(line) - # IP addresses: keep as is - elif re_ip_address.match(line): - outfile.write(line) - # Regexps: extract final constant part - elif line[0] == '/': - line = line.rstrip(r'$/').replace(r'\.', r'.') - host = re_domain_name.findall(line)[-1] - result = host + '\n' - if result not in entries: - entries.append(result) - outfile.write(result) - # Domain names: prepend a dot if the domain name contains only one dot - elif re_domain_name.match(line): - if line.count('.') < 2: - result = '.' + line - else: - result = line - if result not in entries: - entries.append(result) - outfile.write(result) - # Unrecognized: report on stderr and comment in output - else: - outfile.write('# IGNORED: ' + line) - sys.stderr.write("Couldn't process line: %s" % line) - - -if __name__ == '__main__': - - # Check number of arguments - if len(sys.argv) > 3: - print "Usage: %s [input] [output]" % sys.argv[0] - print "If input/output is omitted or -, stdin/stdout is used." - sys.exit(1) - - # Parse first argument - if len(sys.argv) > 1 and sys.argv[1] != '-': - infile = open(sys.argv[1], 'r') - else: - infile = sys.stdin - - # Parse second argument - if len(sys.argv) > 2 and sys.argv[2] != '-': - if sys.argv[1] == sys.argv[2]: - print "Source file and destination file are identical, aborting" - sys.exit(1) - if os.path.exists(sys.argv[2]): - print "Destination file %s already exists, aborting" % sys.argv[2] - sys.exit(1) - outfile = open(sys.argv[2], 'w') - else: - outfile = sys.stdout - - # Do the processing - process(infile, outfile)