W dniu 28.02.2013 08:03, Nikita Koshikov pisze:
On Thu, Feb 28, 2013 at 1:53 AM, Piotr Rotter <piotr.rot...@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**.rot...@active24.pl<tpiotr.rot...@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.rot...@active24.pl>
\temail=piotr.**rot...@active24.pl <piotr.rot...@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**.rot...@active24.pl<tpiotr.rot...@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.rot...@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.

Reply via email to