W dniu 28.02.2013 08:03, Nikita Koshikov pisze:
On Thu, Feb 28, 2013 at 1:53 AM, Piotr Rotter piotr.rotter@active24.plwrote:
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@active24.pltpiotr.rotter@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@active24.pl \temail=piotr.**rotter@active24.pl piotr.rotter@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\nhttp://active24.pl/piotr.rotter/%5Ctuid=502%5Ctgid=502%5Ctquota_rule=*:stora...", 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@active24.pl<tpiotr.rotter@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@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.