На главную | В раздел

Courier authdaemon socket interface interraction with Perl

Описание интерфейса

Courier MTA authdaemon создает Unix socket, для взаимодействия с другими приложениям, по-умолчанию этот socket находится по-пути /var/run/courier/authdaemon/socket

Запрос

Запрос состоит из 3х элементов:
  1. AUTH<sp>Длинна последующих полей в символах
  2. Сервис (для IMAP это imap, для SMTP это smtp, Вы можете придумать какой-то свой сервис, скажем WEB-mail и указывать webmail в этом поле)
  3. Тип авторизации
  4. Имя пользователя
  5. Пароль пользователя
Эти три поля разделены символом "новая строка"(new line) \n
Поле Сервис имеет большое значение, для указанного сервиса в записи пользователя в файле /etc/courier/userdb.dat должен существовать атрибут <Сервис>pw, в ином случае авторизация не пройдёт(за исключением указания пустого пароля)

Ответ

В успешном ответе authdaemon возвращает поля, содержащиеся в запси, соответствующей указанному пользователю из файла /etc/courier/userdb.dat
UID=1
GID=1
HOME=/home/UserHomeDir
ADDRESS=User
MAILDIR=UserMailDir
PASSWD=EncryptedPassword
PASSWD2=ClearTextPassword
.
В неуспешном ответе будет только
FAIL

Исходный код примера

#
#
# (C) 2012 Konstantin S. Vishnivetsky 
# $Id: AuthFrom.pm 210 2012-07-24 02:19:31Z kvishnivetsky $
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#
# For contacts:
# WEB: http://www.vishnivetsky.ru
# E-mail: web-projects@vishnivetsky.ru
# SkyPE: kvishnivetsky
# ICQ: 328-468-511
# Phone: +7 913 774-7588
#
#######################################################################

use strict;
use utf8;
use Socket;

my ($login, $pass)  = @ARGV;
my $socketName = '/var/run/courier/authdaemon/socket';

my $data;
my $request;

socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "ERROR: $!";
connect(SOCK, sockaddr_un($socketName)) or die "ERROR: $!";

# Forming request data
$data = join("\n", 'imap', 'login', $login, $pass);

# Forming request header
$request = join("\n", length($data), $data);

printf "Request:\n%s\n", $request;
printf "Response:\n";

# Sending AUTH request
send (SOCK, "AUTH $request", 0);

# Reading AUTH response
while () {
    print $_;
}

Связные статьи

Courier MTA auth from user perl filter
© Константин С. Вишнивецкий, 2007-2017