From: Torbjorn T. <et...@us...> - 2006-11-24 09:38:27
|
Update of /cvsroot/jungerl/jungerl/lib/eldap/src In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv19303 Modified Files: eldap.erl Log Message: Cdo_connect: don't use error-prone ssl:peercert/2 do_connect: don't write stuff to console do_connect: don't fail worse on connection failures if SSL is used, than if not ldap_closed_p: fix detection of shut down SSL connections exec_simple_bind_reply: fix usage of incorrect record (that used to work 'by accident') Index: eldap.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/eldap/src/eldap.erl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- eldap.erl 28 Feb 2005 23:29:22 -0000 1.4 +++ eldap.erl 24 Nov 2006 09:38:11 -0000 1.5 @@ -366,15 +366,7 @@ ssl:seed("bkrlnateqqo" ++ integer_to_list(X)); true -> true end, - {ok, Fd} = ssl:connect(Host, Data#eldap.port, [{verify,0}|Opts]), - if Vsn >= "5.3" -> - %% In R9C, but not in R9B - {ok, Cert} = ssl:peercert(Fd, [ssl, subject]), - io:fwrite("ssl_connect: peer cert:~n~p~n", [Cert]); - true -> - io:fwrite("ssl-connect succeded~n", []) - end, - {ok, Fd}. + ssl:connect(Host, Data#eldap.port, [{verify,0}|Opts]). loop(Cpid, Data) -> @@ -468,7 +460,7 @@ Msg#'LDAPMessage'.messageID == Data#eldap.id -> case Msg#'LDAPMessage'.protocolOp of {bindResponse, Result} -> - case Result#'LDAPResult'.resultCode of + case Result#'BindResponse'.resultCode of success -> {ok,Data}; Error -> {error, Error} end; @@ -785,7 +777,20 @@ send(To,Msg) -> To ! {self(),Msg}. recv(From) -> receive {From,Msg} -> Msg end. +ldap_closed_p(Data, Emsg) when Data#eldap.use_tls == true -> + %% Check if the SSL socket seems to be alive or not + case catch ssl:sockname(Data#eldap.fd) of + {error, _} -> + ssl:close(Data#eldap.fd), + {error, ldap_closed}; + {ok, _} -> + {error, Emsg}; + _ -> + %% sockname crashes if the socket pid is not alive + {error, ldap_closed} + end; ldap_closed_p(Data, Emsg) -> + %% non-SSL socket case inet:port(Data#eldap.fd) of {error,_} -> {error, ldap_closed}; _ -> {error,Emsg} |