mirror of
https://github.com/chatmail/relay.git
synced 2026-05-20 04:48:06 +00:00
Authenticate echobot by passing /run/echobot/password to doveauth
This commit is contained in:
@@ -4,6 +4,7 @@ import time
|
|||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import crypt
|
import crypt
|
||||||
|
from pathlib import Path
|
||||||
from socketserver import (
|
from socketserver import (
|
||||||
UnixStreamServer,
|
UnixStreamServer,
|
||||||
StreamRequestHandler,
|
StreamRequestHandler,
|
||||||
@@ -86,11 +87,18 @@ def lookup_userdb(db, config: Config, user):
|
|||||||
|
|
||||||
def lookup_passdb(db, config: Config, user, cleartext_password):
|
def lookup_passdb(db, config: Config, user, cleartext_password):
|
||||||
if user == f"echo@{config.mail_domain}":
|
if user == f"echo@{config.mail_domain}":
|
||||||
|
# Echobot writes password it wants to log in with into /run/echobot/password
|
||||||
|
try:
|
||||||
|
password = Path("/run/echobot/password").read_text()
|
||||||
|
except Exception:
|
||||||
|
logging.exception("Exception when trying to read /run/echobot/password")
|
||||||
|
return None
|
||||||
|
|
||||||
return dict(
|
return dict(
|
||||||
home=f"/home/vmail/mail/{config.mail_domain}/echo@{config.mail_domain}",
|
home=f"/home/vmail/mail/{config.mail_domain}/echo@{config.mail_domain}",
|
||||||
uid="vmail",
|
uid="vmail",
|
||||||
gid="vmail",
|
gid="vmail",
|
||||||
password=encrypt_password("eiPhiez0eo8raighoh0C"), # FIXME read from config
|
password=encrypt_password(password),
|
||||||
)
|
)
|
||||||
|
|
||||||
with db.write_transaction() as conn:
|
with db.write_transaction() as conn:
|
||||||
|
|||||||
@@ -7,10 +7,13 @@ it will echo back any message that has non-empty text and also supports the /hel
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from deltachat_rpc_client import Bot, DeltaChat, EventType, Rpc, events
|
from deltachat_rpc_client import Bot, DeltaChat, EventType, Rpc, events
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from chatmaild.config import read_config
|
from chatmaild.config import read_config
|
||||||
|
from chatmaild.newemail import create_newemail_dict
|
||||||
|
|
||||||
hooks = events.HookCollection()
|
hooks = events.HookCollection()
|
||||||
|
|
||||||
@@ -75,9 +78,23 @@ def main():
|
|||||||
account = accounts[0] if accounts else deltachat.add_account()
|
account = accounts[0] if accounts else deltachat.add_account()
|
||||||
|
|
||||||
bot = Bot(account, hooks)
|
bot = Bot(account, hooks)
|
||||||
|
|
||||||
|
config = read_config(sys.argv[1])
|
||||||
|
|
||||||
|
# Create password file
|
||||||
|
if bot.is_configured():
|
||||||
|
password = bot.account.get_config("mail_pw")
|
||||||
|
else:
|
||||||
|
password = create_newemail_dict(config)["password"]
|
||||||
|
Path("/run/echobot/password").write_text(password)
|
||||||
|
|
||||||
|
# Give the user which doveauth runs as access to the password file.
|
||||||
|
subprocess.run(
|
||||||
|
["/usr/bin/setfacl", "-m", "user:vmail:r", "/run/echobot/password"],
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
|
||||||
if not bot.is_configured():
|
if not bot.is_configured():
|
||||||
config = read_config(sys.argv[1])
|
|
||||||
password = "eiPhiez0eo8raighoh0C" # FIXME read from config
|
|
||||||
email = "echo@" + config.mail_domain
|
email = "echo@" + config.mail_domain
|
||||||
bot.configure(email, password)
|
bot.configure(email, password)
|
||||||
bot.run_forever()
|
bot.run_forever()
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ Group=echobot
|
|||||||
# Create /var/lib/echobot
|
# Create /var/lib/echobot
|
||||||
StateDirectory=echobot
|
StateDirectory=echobot
|
||||||
|
|
||||||
|
# Create /run/echobot
|
||||||
|
#
|
||||||
|
# echobot stores /run/echobot/password
|
||||||
|
# with a password there, which doveauth then reads.
|
||||||
|
RuntimeDirectory=echobot
|
||||||
|
|
||||||
WorkingDirectory=/var/lib/echobot
|
WorkingDirectory=/var/lib/echobot
|
||||||
|
|
||||||
# Apply security restrictions suggested by
|
# Apply security restrictions suggested by
|
||||||
@@ -24,7 +30,10 @@ NoNewPrivileges=true
|
|||||||
PrivateDevices=true
|
PrivateDevices=true
|
||||||
PrivateMounts=true
|
PrivateMounts=true
|
||||||
PrivateTmp=true
|
PrivateTmp=true
|
||||||
PrivateUsers=true
|
|
||||||
|
# We need to know about doveauth user to give it access to /run/echobot/password
|
||||||
|
PrivateUsers=false
|
||||||
|
|
||||||
ProtectClock=true
|
ProtectClock=true
|
||||||
ProtectControlGroups=true
|
ProtectControlGroups=true
|
||||||
ProtectHostname=true
|
ProtectHostname=true
|
||||||
|
|||||||
Reference in New Issue
Block a user