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

50 lines
1.8 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):
destination = os.path.join("/etc/dovecot", dovecot_file[6:])
shutil.copyfile(dovecot_file, destination)
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):
destination = os.path.join("/etc/dovecot", dovecot_file[6:])
shutil.copyfile(dovecot_file, destination)
for dovecot_file in glob.glob("/overrides/**/*.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)
if not os.path.isfile("/data/dh.pem"):
subprocess.call(["/usr/bin/openssl", "dhparam", "-dsaparam", "-out", "/data/dh.pem", "4096"])
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:])