[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