[Dovecot] how to talk with doveadmin unix socket
Piotr Rotter
piotr.rotter at active24.pl
Sat Mar 2 00:14:23 EET 2013
W dniu 28.02.2013 08:03, Nikita Koshikov pisze:
> On Thu, Feb 28, 2013 at 1:53 AM, Piotr Rotter <piotr.rotter at active24.pl>wrote:
>
>> Hello,
>>
>> I would like to get mailbox quota by doveadm unix socket
>> (/var/run/dovecor/doveadm-**server). I get from strace syntax of
>> comunication:
>>
>> write(9, "VERSION\t1\t0\nUSER\t1\tpiotr**.rotter at active24.pl<tpiotr.rotter at active24.pl>
>> \tservice=**doveadm\n", 60) = 60
>> read(9, "VERSION\t1\t1\nSPID\t20805\n"**, 8192) = 23
>> read(9, "USER\t1\tpiotr.rotter@**active24.pl <tpiotr.rotter at active24.pl>
>> \temail=piotr.**rotter at active24.pl <piotr.rotter at active24.pl>\tclear=**
>> 7T33z456\thome=/vm/08/A/active**24.pl/piotr.rotter/\tuid=502\**
>> tgid=502\tquota_rule=*:**storage=2097152000B\tquota_**
>> rule2=*:messages=50000\n<http://active24.pl/piotr.rotter/%5Ctuid=502%5Ctgid=502%5Ctquota_rule=*:storage=2097152000B%5Ctquota_rule2=*:messages=50000%5Cn>",
>> 8169) = 196
>>
>> and I wrote super simple client in php:
>>
>> <?php
>> $sock = stream_socket_client('unix:///**var/run/dovecot/doveadm-**server',
>> $errno, $errstr);
>> fwrite($sock, "VERSION\t1\t0\nUSER\t1\tpiotr**.rotter at active24.pl<tpiotr.rotter at active24.pl>
>> \tservice=**doveadm\n");
>> echo fread($sock, 4096)."\n";
>> echo fread($sock, 4096)."\n";
>> fclose($sock);
>> ?>
>>
>> But i get only "+" sign and line in errorlog as below:
>>
>> 2013-02-28T00:39:56.377437+01:**00 kurier9 dovecot: doveadm: Error:
>> doveadm client not compatible with this server (mixed old and new binaries?)
>>
>> I would be very grateful for your help with this problem, what I doing
>> wrong.
>>
>> My current dovecot version is 2.1.13
>>
>>
> Here is my example on perl
>
> socket(TSOCK, PF_UNIX, SOCK_STREAM,0);
> connect(TSOCK, sockaddr_un("$conf{quota_socket}"));
>
> if ($? != 0) {
> #error here
> }
>
> #After connect on socket, dovecot returns "+" or "-". Just a simple
> check for data.
> if (defined(my $answer = <TSOCK>)) {
>
> print TSOCK "VERSION\tdoveadm-server\t1\t0\n";
> print TSOCK "PLAIN\t$conf{'doveadm_password'}\n";
> TSOCK->flush;
> #'+' here
> $answer=<TSOCK>;
> print TSOCK "\t$local_part\@$domain\tquota get\n";
> TSOCK->flush;
>
> my $quota_data = <TSOCK>;
>
>
> #"+" if everything is OK
> $answer = <TSOCK>;
>
> close TSOCK;
> }
>
> Don't forget to set doveadm_password= in dovecot config(clearttext) and you
> must encode password in base64 for using in a script (after PLAIN command).
>
> PS
> dovecot version 2.1.15 here.
>
Hi,
Thank You for example but I still don't know what I doing wrong.
I set that in master.cf
service doveadm {
unix_listener doveadm-server {
mode = 0666
}
}
doveadm_password=foobar
My script now look like that:
$DOVEADM_PASS = base64_encode('foobar');
$sock = stream_socket_client('unix:///var/run/dovecot/doveadm-server',
$errno, $errstr);
echo fread($sock, 4096)."\n";
fwrite($sock, "VERSION\tdoveadm-server\t1\t0\n");
fwrite($sock, "PLAIN\t$DOVEADM_PASS\n");
fflush($sock);
echo fread($sock, 4096)."\n";
fwrite($sock, "\tpiotr.rotter at active24.pl\tquota get\n");
fflush($sock);
echo fread($sock, 4096)."\n";
fclose($sock);
I get two times "-" and that in logs
dovecot: doveadm: Error: doveadm client didn't authenticate as 'doveadm'
Please give me any tip.
More information about the dovecot
mailing list