-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi
We made a little testpatch for the opensock() function in
authdaemonlib.c.
We patched the source because under high load, the imap and pop
daemons (more than one ;-) can simutaniously block the socket to the
authdaemond, so that another imap/pop daemon can not connect to the
socket. This will lead to really ugly tempfails and the user has to
retype the password.
Whats new:
If we can not connect to the UNIX socket, wait (random between 0.9s -
1.1s) and try again. Do this max 10 times and if the socket is still
not available, exit with "authentication failed".
Our solution is maybe not really nice but works quite well.
Comments desired.
Patch:
- --- authdaemonlib.c.orig 2006-05-24 17:06:45.000000000 +0200
+++ authdaemonlib.c.angepasst 2006-05-24 17:02:49.000000000 +0200
@@ -27,6 +27,8 @@
#include "authdaemonrc.h"
#include "numlib/numlib.h"
+#include "courierauthdebug.h"
+
static int TIMEOUT_SOCK=10,
TIMEOUT_WRITE=10,
TIMEOUT_READ=30;
@@ -153,16 +155,35 @@
TIMEOUT_WRITE=n;
}
- - if (s_connect(s, (const struct sockaddr *)&skun, sizeof(skun),
- - TIMEOUT_SOCK))
- - {
- - perror("ERR: authdaemon: s_connect() failed");
- - if (errno == ETIMEDOUT || errno == ECONNREFUSED)
- - fprintf(stderr, "ERR: [Hint: perhaps
authdaemond is not running?]\n");
- - close(s);
- - return (-1);
+//try 10 times if ERROR = EAGAIN
+courier_authdebug_login_level = 1;
+ int i;
+ for(i;i<10;i++){
+
+ if (s_connect(s, (const struct sockaddr *)&skun,
sizeof(skun),
+ TIMEOUT_SOCK))
+ {
+ if (errno!=EAGAIN){
+ perror("ERR: authdaemon: s_connect()
failed");
+ if (errno == ETIMEDOUT || errno ==
ECONNREFUSED)
+ fprintf(stderr, "ERR: [Hint:
perhaps authdaemond is not running?]\n");
+ close(s);
+ courier_authdebug_login_level =0;
+ return (-1);
+ } else if (errno == EAGAIN){
+ DPRINTF("ERR: EAGAIN. sleeping now...");
+ int nr = rand()/RAND_MAX*200000;
+ usleep(900000+nr);
+ }
+ }else{
+ courier_authdebug_login_level =0;
+ return (s);
+ }
}
- - return (s);
+ DPRINTF("ERR: s_connect failed 10 times!");
+ close(s);
+ courier_authdebug_login_level =0;
+ return (-1);
}
static int writeauth(int fd, const char *p, unsigned pl)
Greets, Norbert
- --
_____________________________
University of Berne
IT-Services Department
Norbert Kottmann
Gesellschaftsstrasse 6
CH-3012 Bern
Tel. +41 (0)31 631 38 38
Fax +41 (0)31 631 43 57
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
iD8DBQFEdH7ZQAEAxP0Zi9ERAjXTAKCLbU68+l+21FTeGVBbS14Zltac3wCgyeyp
/z98xUVmU6plBWqPCGkBrvw=
=IPox
-----END PGP SIGNATURE-----
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
Courier-imap mailing list
[email protected]
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-imap