Mercurial > prosody-modules
comparison mod_auth_dovecot/mod_auth_dovecot.lua @ 431:fb7898826026
mod_auth_dovecot: Added support for TCP sockets, and checks for UNIX socket availability.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sat, 17 Sep 2011 18:19:31 +0500 |
| parents | e840b4ce538d |
| children |
comparison
equal
deleted
inserted
replaced
| 430:f0fafd19fd72 | 431:fb7898826026 |
|---|---|
| 4 -- Copyright (C) 2010-2011 Matthew Wild | 4 -- Copyright (C) 2010-2011 Matthew Wild |
| 5 -- Copyright (C) 2010-2011 Waqas Hussain | 5 -- Copyright (C) 2010-2011 Waqas Hussain |
| 6 -- Copyright (C) 2011 Kim Alvefur | 6 -- Copyright (C) 2011 Kim Alvefur |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local socket_unix = require "socket.unix"; | 9 pcall(require, "socket.unix"); |
| 10 local datamanager = require "util.datamanager"; | 10 local datamanager = require "util.datamanager"; |
| 11 local usermanager = require "core.usermanager"; | 11 local usermanager = require "core.usermanager"; |
| 12 local log = require "util.logger".init("auth_dovecot"); | 12 local log = require "util.logger".init("auth_dovecot"); |
| 13 local new_sasl = require "util.sasl".new; | 13 local new_sasl = require "util.sasl".new; |
| 14 local nodeprep = require "util.encodings".stringprep.nodeprep; | 14 local nodeprep = require "util.encodings".stringprep.nodeprep; |
| 15 local base64 = require "util.encodings".base64; | 15 local base64 = require "util.encodings".base64; |
| 16 local sha1 = require "util.hashes".sha1; | 16 local sha1 = require "util.hashes".sha1; |
| 17 | 17 |
| 18 local prosody = prosody; | 18 local prosody = prosody; |
| 19 local socket_path = module:get_option_string("dovecot_auth_socket", "/var/run/dovecot/auth-login"); | 19 local socket_path = module:get_option_string("dovecot_auth_socket", "/var/run/dovecot/auth-login"); |
| 20 local socket_host = module:get_option_string("dovecot_auth_host", "127.0.0.1"); | |
| 21 local socket_port = module:get_option_string("dovecot_auth_port"); | |
| 20 local append_host = module:get_option_boolean("auth_append_host", false); | 22 local append_host = module:get_option_boolean("auth_append_host", false); |
| 23 if not socket_port and not socket.unix then | |
| 24 error("LuaSocket was not compiled with UNIX socket support. Try using Dovecot 2.x with inet_listener support, or recompile LuaSocket with UNIX socket support."); | |
| 25 end | |
| 21 | 26 |
| 22 function new_provider(host) | 27 function new_provider(host) |
| 23 local provider = { name = "dovecot", request_id = 0 }; | 28 local provider = { name = "dovecot", request_id = 0 }; |
| 24 log("debug", "initializing dovecot authentication provider for host '%s'", host); | 29 log("debug", "initializing dovecot authentication provider for host '%s'", host); |
| 25 | 30 |
| 38 -- The following connects to a new socket and send the handshake | 43 -- The following connects to a new socket and send the handshake |
| 39 function provider.connect(self) | 44 function provider.connect(self) |
| 40 -- Destroy old socket | 45 -- Destroy old socket |
| 41 provider:close(); | 46 provider:close(); |
| 42 | 47 |
| 43 conn = socket.unix(); | 48 local ok, err; |
| 44 | 49 if socket_port then |
| 45 -- Create a connection to dovecot socket | 50 log("debug", "connecting to dovecot TCP socket at '%s':'%s'", socket_host, socket_port); |
| 46 log("debug", "connecting to dovecot socket at '%s'", socket_path); | 51 conn = socket.tcp(); |
| 47 local ok, err = conn:connect(socket_path); | 52 ok, err = conn:connect(socket_host, socket_port); |
| 53 elseif socket.unix then | |
| 54 log("debug", "connecting to dovecot UNIX socket at '%s'", socket_path); | |
| 55 conn = socket.unix(); | |
| 56 ok, err = conn:connect(socket_path); | |
| 57 else | |
| 58 err = "luasocket was not compiled with UNIX sockets support"; | |
| 59 end | |
| 48 if not ok then | 60 if not ok then |
| 49 log("error", "error connecting to dovecot socket at '%s'. error was '%s'. check permissions", socket_path, err); | 61 if socket_port then |
| 62 log("error", "error connecting to dovecot TCP socket at '%s':'%s'. error was '%s'. check permissions", socket_host, socket_port, err); | |
| 63 else | |
| 64 log("error", "error connecting to dovecot UNIX socket at '%s'. error was '%s'. check permissions", socket_path, err); | |
| 65 end | |
| 50 provider:close(); | 66 provider:close(); |
| 51 return false; | 67 return false; |
| 52 end | 68 end |
| 53 | 69 |
| 54 -- Send our handshake | 70 -- Send our handshake |
