diff options
author | Jeremy Allison <jra@samba.org> | 2004-07-01 16:35:43 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:52:06 -0500 |
commit | 569177a194ef990b55d3ad5d5243ca0f2659f25c (patch) | |
tree | 1c55f50786156deeeba9df7d37feadce2a04319e /source3/libads | |
parent | aa9be75d8a836106037389cb3d774d38d1397ea5 (diff) | |
download | samba-569177a194ef990b55d3ad5d5243ca0f2659f25c.tar.gz samba-569177a194ef990b55d3ad5d5243ca0f2659f25c.tar.bz2 samba-569177a194ef990b55d3ad5d5243ca0f2659f25c.zip |
r1317: Patch from Joe Meadows "Joe Meadows" <jameadows@webopolis.com> to
add a timeout to the ldap open calls. New parameter, ldap timeout
added.
Jeremy.
(This used to be commit e5b3094c4cc75eb07f667dd1aeb73921ed7366ac)
Diffstat (limited to 'source3/libads')
-rw-r--r-- | source3/libads/ldap.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 985d3cb576..05d68e6ae6 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -37,6 +37,35 @@ * codepoints in UTF-8). This may have to change at some point **/ +static SIG_ATOMIC_T gotalarm; + +/*************************************************************** + Signal function to tell us we timed out. +****************************************************************/ + +static void gotalarm_sig(void) +{ + gotalarm = 1; +} + +LDAP *ldap_open_with_timeout(const char *server, int port, unsigned int to) +{ + LDAP *ldp = NULL; + + /* Setup timeout */ + gotalarm = 0; + CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); + alarm(to); + /* End setup timeout. */ + + ldp = ldap_open(server, port); + + /* Teardown timeout. */ + CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN); + alarm(0); + + return ldp; +} /* try a connection to a given ldap server, returning True and setting the servers IP @@ -58,7 +87,7 @@ static BOOL ads_try_connect(ADS_STRUCT *ads, const char *server, unsigned port) /* this copes with inet_ntoa brokenness */ srv = strdup(server); - ads->ld = ldap_open(srv, port); + ads->ld = ldap_open_with_timeout(srv, port, lp_ldap_timeout()); if (!ads->ld) { free(srv); return False; |