You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dovecot/docker-entrypoint.py

74 lines
2.5 KiB
Python

#!/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:])