diff --git a/modoboa/core/__init__.py b/modoboa/core/__init__.py index db00fdef5..ec4208b38 100644 --- a/modoboa/core/__init__.py +++ b/modoboa/core/__init__.py @@ -37,7 +37,7 @@ base_events = [ "GetExtraParameters", "ExtraFormFields", - "SaveExtraFormFields" + "SaveExtraFormFields", ] diff --git a/modoboa/core/commands/postfix_maps.py b/modoboa/core/commands/postfix_maps.py index 021ceae9b..219a77174 100644 --- a/modoboa/core/commands/postfix_maps.py +++ b/modoboa/core/commands/postfix_maps.py @@ -26,6 +26,43 @@ query = {{ query|safe }} if not self.tpl_context['dbhost']: self.tpl_context['dbhost'] = '127.0.0.1' + def __render_map(self, args, mapobject): + """Render a map file. + + :param args: command line arguments + :param mapobject: a ``MapFile`` subclass + """ + content = self.template.render( + Context(dict( + self.tpl_context.items(), + query=getattr(mapobject, args.dbtype) + )) + ) + with open("%s/%s" % (args.destdir, mapobject.filename), "w") as fp: + print >> fp, """# This file was generated on %s by running: +# %s %s +# DO NOT EDIT! +""" % (datetime.datetime.now().isoformat(), + os.path.basename(sys.argv[0]), + ' '.join(sys.argv[1:])) + print >> fp, content + + def __render_std_maps(self, args): + """Render standard map files. + + (ie. the ones belonging to the 'std' category) + + :param args: command line arguments + """ + for v in globals().values(): + if not inspect.isclass(v) or not issubclass(v, MapFile): + continue + if v is MapFile: + continue + if not v.category in args.categories: + continue + self.__render_map(args, v) + def render(self, args): """Render all map files. @@ -35,26 +72,7 @@ query = {{ query|safe }} os.mkdir(args.destdir) except OSError: pass - - for v in globals().values(): - if not inspect.isclass(v) or not issubclass(v, MapFile): - continue - if v is MapFile: - continue - if not v.category in args.categories: - continue - content = self.template.render( - Context(dict(self.tpl_context.items(), - query=getattr(v, args.dbtype))) - ) - with open("%s/%s" % (args.destdir, v.filename), "w") as fp: - print >> fp, """# This file was generated on %s by running: -# %s %s -# DO NOT EDIT! -""" % (datetime.datetime.now().isoformat(), - os.path.basename(sys.argv[0]), - ' '.join(sys.argv[1:])) - print >> fp, content + self.__render_std_maps(args) class SQLiteMapFilesGenerator(MapFilesGenerator): @@ -137,6 +155,22 @@ class AutoRepliesMap(MapFile): sqlite = "SELECT full_address, autoreply_address FROM postfix_autoreply_alias WHERE full_address='%s'" +class RelayDomainsTransportMap(MapFile): + category = "relaydomains" + filename = "sql-relaydomains-transport.cf" + mysql = "SELECT CONCAT(srv.name, ':') FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id WHERE rdom.enabled=1 AND rdom.name='%s'" + postgres = "SELECT srv.name || ':' FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id WHERE rdom.enabled AND rdom.name='%s'" + sqlite = "SELECT srv.name || ':' FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id WHERE rdom.enabled=1 AND rdom.name='%s'" + + +class RelayDomainAliasesTransportMap(MapFile): + category = "relaydomains" + filename = "sql-relaydomain-aliases-transport.cf" + mysql = "SELECT CONCAT(srv.name, ':') FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id INNER JOIN postfix_relaydomains_relaydomainalias AS rdomalias ON rdom.id=rdomalias.target_id WHERE rdom.enabled=1 AND rdomalias.enabled=1 AND rdomalias.name='%s'" + postgres = "SELECT srv.name || ':' FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id INNER JOIN postfix_relaydomains_relaydomainalias AS rdomalias ON rdom.id=rdomalias.target_id WHERE rdom.enabled AND rdomalias.enabled AND rdomalias.name='%s'" + sqlite = "SELECT srv.name || ':' FROM postfix_relaydomains_service AS srv INNER JOIN postfix_relaydomains_relaydomain AS rdom ON rdom.service_id=srv.id INNER JOIN postfix_relaydomains_relaydomainalias AS rdomalias ON rdom.id=rdomalias.target_id WHERE rdom.enabled=1 AND rdomalias.enabled=1 AND rdomalias.name='%s'" + + class PostfixMapsCommand(Command): help = "Generate ready-to-use postfix map files"