#!/usr/bin/python3 # -*- coding: utf-8 -*- import os import shutil import shlex import sys import glob import jinja2 import subprocess def jinja_render_file(in_path, data, out_path): render_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(in_path))) output = render_environment.get_template(os.path.basename(in_path)).render(**data) with open(out_path, 'w', encoding='utf-8') as rf: rf.write(output) for dovecot_file in glob.glob("/conf/**/*.conf", recursive=True): out_path = os.path.join("/etc/dovecot", dovecot_file[6:]) shutil.copyfile(dovecot_file, out_path) for dovecot_file in glob.glob("/conf/**/*.jinja", recursive=True): out_path = os.path.join("/etc/dovecot", dovecot_file[6:-6]) jinja_render_file(dovecot_file, os.environ, out_path) os.chmod(out_path, 600) for dovecot_file in glob.glob("/overrides/**/*.conf", recursive=True): out_path = os.path.join("/etc/dovecot", dovecot_file[11:]) shutil.copyfile(dovecot_file, out_path) for dovecot_file in glob.glob("/overrides/**/*.jinja", recursive=True): out_path = os.path.join("/etc/dovecot", dovecot_file[11:-6]) jinja_render_file(dovecot_file, os.environ, out_path) os.chmod(out_path, 600) if not os.path.isfile("/data/dh.pem"): subprocess.call(["/usr/bin/openssl", "dhparam", "-dsaparam", "-out", "/data/dh.pem", "4096"]) for sieve_file in glob.glob("/sieve/**/*.sieve", recursive=True): out_path = os.path.join("/data/sieve/global/", sieve_file[7:]) if os.path.exists(out_path): continue out_dir = os.path.dirname(out_path) if not os.path.exists(out_dir): os.makedirs(out_dir) shutil.copyfile(sieve_file, out_path) subprocess.call(["sievec", out_path]) for sieve_bin_file in glob.glob("/sieve/bin/**/*", recursive=True): out_path = os.path.join("/usr/lib/dovecot/sieve/", sieve_bin_file[11:]) if os.path.exists(out_path): continue out_dir = os.path.dirname(out_path) if not os.path.exists(out_dir): os.makedirs(out_dir) shutil.copyfile(sieve_bin_file, out_path) os.chmod(out_path, 0o755) subprocess.call(["/bin/mkdir", "-p", "/data/vmail"]) subprocess.call(["/bin/chmod", "u=rwX,g=rX,o=rX", "/data"]) subprocess.call(["/bin/chown", "mail:", "/data/vmail"]) subprocess.call(["/bin/chmod", "u=rwX,g=rX,o=", "/data/vmail"]) subprocess.call(["/bin/mkdir", "-p", "/data/sieve/global/"]) subprocess.call(["/bin/chown", "mail:mail", "/data/sieve"]) # Run CMD subprocess.call(sys.argv[1:])