Author: gd Date: 2006-05-12 23:20:39 +0000 (Fri, 12 May 2006) New Revision: 15558
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15558 Log: Do not wait endless for a CLDAP reply when the LDAP server is unavailable; use "ldap timeout" handling. Jerry, please check. Guenther Modified: branches/SAMBA_3_0/source/libads/cldap.c trunk/source/libads/cldap.c Changeset: Modified: branches/SAMBA_3_0/source/libads/cldap.c =================================================================== --- branches/SAMBA_3_0/source/libads/cldap.c 2006-05-12 23:13:39 UTC (rev 15557) +++ branches/SAMBA_3_0/source/libads/cldap.c 2006-05-12 23:20:39 UTC (rev 15558) @@ -165,7 +165,17 @@ return 0; } - +static SIG_ATOMIC_T gotalarm; + +/*************************************************************** + Signal function to tell us we timed out. +****************************************************************/ + +static void gotalarm_sig(void) +{ + gotalarm = 1; +} + /* receive a cldap netlogon reply */ @@ -180,8 +190,18 @@ blob = data_blob(NULL, 8192); + /* Setup timeout */ + gotalarm = 0; + CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); + alarm(lp_ldap_timeout()); + /* End setup timeout. */ + ret = read(sock, blob.data, blob.length); + /* Teardown timeout. */ + CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN); + alarm(0); + if (ret <= 0) { d_fprintf(stderr, "no reply received to cldap netlogon\n"); return -1; Modified: trunk/source/libads/cldap.c =================================================================== --- trunk/source/libads/cldap.c 2006-05-12 23:13:39 UTC (rev 15557) +++ trunk/source/libads/cldap.c 2006-05-12 23:20:39 UTC (rev 15558) @@ -165,7 +165,17 @@ return 0; } - +static SIG_ATOMIC_T gotalarm; + +/*************************************************************** + Signal function to tell us we timed out. +****************************************************************/ + +static void gotalarm_sig(void) +{ + gotalarm = 1; +} + /* receive a cldap netlogon reply */ @@ -180,8 +190,18 @@ blob = data_blob(NULL, 8192); + /* Setup timeout */ + gotalarm = 0; + CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); + alarm(lp_ldap_timeout()); + /* End setup timeout. */ + ret = read(sock, blob.data, blob.length); + /* Teardown timeout. */ + CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN); + alarm(0); + if (ret <= 0) { d_fprintf(stderr, "no reply received to cldap netlogon\n"); return -1;
