diff --git a/src/chatmail/__init__.py b/src/chatmail/__init__.py index 82c43034..83700c6b 100644 --- a/src/chatmail/__init__.py +++ b/src/chatmail/__init__.py @@ -13,7 +13,7 @@ def _install_chatctl() -> None: """Setup chatctl.""" files.put( src=importlib.resources.files(__package__) - .joinpath("chatctl/chatctl.py") + .joinpath("dovecot/doveauth.py") .open("rb"), dest="/home/vmail/chatctl", user="vmail", @@ -103,8 +103,8 @@ def _configure_dovecot(mail_server: str) -> bool: # luarocks install http lpeg_patterns fifo auth_script = files.put( - src=importlib.resources.files(__package__).joinpath("dovecot/auth.lua"), - dest="/etc/dovecot/auth.lua", + src=importlib.resources.files(__package__).joinpath("dovecot/doveauth.lua"), + dest="/etc/dovecot/doveauth.lua", user="root", group="root", mode="644", diff --git a/src/chatmail/dovecot/auth.lua b/src/chatmail/dovecot/auth.lua deleted file mode 100644 index eb4b73b3..00000000 --- a/src/chatmail/dovecot/auth.lua +++ /dev/null @@ -1,35 +0,0 @@ --- Lua based authentication script for Dovecot. --- --- It calls external chatctl command to answer requests. - --- Hexadecimal aka base16 encoding. -function hex(data) - return (data:gsub(".", function(char) return string.format("%2X", char:byte()) end)) -end - --- Escape shell argument by hex encoding it and wrapping in quotes. -function escape(data) - return ("'"..hex(data).."'") -end - -function auth_password_verify(request, password) - if os.execute("/home/vmail/chatctl hexauth "..escape(request.user).." "..escape(password)) then - return dovecot.auth.PASSDB_RESULT_OK, {} - end - return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "" -end - -function auth_passdb_lookup(request) - if os.execute("/home/vmail/chatctl hexlookup "..escape(request.user)) then - return dovecot.auth.PASSDB_RESULT_OK, {} - end - return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "no such user" -end - -function auth_userdb_lookup(request) - if os.execute("/home/vmail/chatctl hexlookup "..escape(request.user)) then - return dovecot.auth.USERDB_RESULT_OK, "uid=vmail gid=vmail" - end - - return dovecot.auth.USERDB_RESULT_USER_UNKNOWN, "no such user" -end diff --git a/src/chatmail/chatctl/doveauth.lua b/src/chatmail/dovecot/doveauth.lua similarity index 100% rename from src/chatmail/chatctl/doveauth.lua rename to src/chatmail/dovecot/doveauth.lua diff --git a/src/chatmail/chatctl/doveauth.py b/src/chatmail/dovecot/doveauth.py similarity index 100% rename from src/chatmail/chatctl/doveauth.py rename to src/chatmail/dovecot/doveauth.py diff --git a/src/chatmail/dovecot/dovecot.conf.j2 b/src/chatmail/dovecot/dovecot.conf.j2 index c4ccaaef..f2ae81bb 100644 --- a/src/chatmail/dovecot/dovecot.conf.j2 +++ b/src/chatmail/dovecot/dovecot.conf.j2 @@ -7,11 +7,11 @@ auth_mechanisms = plain # Authentication for system users. passdb { driver = lua - args = file=/etc/dovecot/auth.lua + args = file=/etc/dovecot/doveauth.lua } userdb { driver = lua - args = file=/etc/dovecot/auth.lua + args = file=/etc/dovecot/doveauth.lua } ## diff --git a/src/chatmail/chatctl/test_doveauth.lua b/src/chatmail/dovecot/test_doveauth.lua similarity index 100% rename from src/chatmail/chatctl/test_doveauth.lua rename to src/chatmail/dovecot/test_doveauth.lua diff --git a/src/chatmail/chatctl/test_doveauth.py b/src/chatmail/dovecot/test_doveauth.py similarity index 100% rename from src/chatmail/chatctl/test_doveauth.py rename to src/chatmail/dovecot/test_doveauth.py