File 5803-Add-new-api-eldap-info-1.patch of Package erlang
From b72877ff5ffe61c39d9fa804ffb32b3864f0c132 Mon Sep 17 00:00:00 2001
From: anupamasingh10 <anupamasingh31@gmail.com>
Date: Thu, 9 Mar 2023 12:17:27 +0100
Subject: [PATCH 3/8] Add new api eldap:info/1
---
lib/eldap/doc/src/eldap.xml | 25 ++++--------------
lib/eldap/src/eldap.erl | 23 +++++-----------
lib/eldap/test/eldap_basic_SUITE.erl | 39 ++++++++--------------------
lib/ssl/src/ssl.erl | 4 +--
4 files changed, 24 insertions(+), 67 deletions(-)
diff --git a/lib/eldap/doc/src/eldap.xml b/lib/eldap/doc/src/eldap.xml
index 5efcbd4c86..edc308ba52 100644
--- a/lib/eldap/doc/src/eldap.xml
+++ b/lib/eldap/doc/src/eldap.xml
@@ -549,29 +549,14 @@ Control2 = eldap:paged_result_control(PageSize, Cookie1),
</desc>
</func>
<func>
- <name since="OTP 26.0">conn_info(Handle) -> {ok, Data} | {error, Reason}</name>
- <fsummary>When LDAP is run over TLS, returns information about the TLS connection.
+ <name since="OTP 26.0">info(Handle) -> #{socket := Socket, socket_type := tcp | ssl}</name>
+ <fsummary>Returns the SSL or TCP socket for LDAP connection.
</fsummary>
<type>
- <v>Handle = handle()</v>
- <v>Data = ssl:connection_info()</v>
- </type>
- <desc><p>Returns the most relevant information for SSL connection to an LDAP server.
- See also ssl:connection_information/1.</p>
- </desc>
- </func>
- <func>
- <name since="OTP 26.0">conn_info(Handle, Items) -> {ok, Data} | {error, Reason}</name>
- <fsummary>When LDAP is run over TLS, returns requested information items about the TLS
- connection.
- </fsummary>
- <type>
- <v>Handle = handle()</v>
- <v>Items = ssl:connection_info_items()</v>
- <v>Data = ssl:connection_info()</v>
+ <v>Socket = ssl:sslsocket() | gen_tcp:socket()</v>
</type>
- <desc><p>Returns the requested information items about the SSL connection to LDAP server,
- if they are defined. See also ssl:connection_information/2.</p>
+ <desc><p>Returns the socket type and socket for a TCP/SSL connection
+ to an LDAP server</p>
</desc>
</func>
diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl
index cc27a31966..ab6363a28b 100644
--- a/lib/eldap/src/eldap.erl
+++ b/lib/eldap/src/eldap.erl
@@ -31,8 +31,7 @@
paged_result_control/1,
paged_result_control/2,
paged_result_cookie/1,
- conn_info/1,
- conn_info/2]).
+ info/1]).
-export([neverDerefAliases/0, derefInSearching/0,
derefFindingBaseObj/0, derefAlways/0]).
@@ -157,13 +156,10 @@ controlling_process(Handle, Pid) when is_pid(Handle), is_pid(Pid) ->
recv(Handle).
%%% --------------------------------------------------------------------
-%%% Return LDAP connection information
+%%% Return LDAP socket information
%%% --------------------------------------------------------------------
-conn_info(Handle) when is_pid(Handle) ->
- conn_info(Handle, []).
-
-conn_info(Handle, Items) when is_pid(Handle) ->
- send(Handle, {conn_info, Items}),
+info(Handle) when is_pid(Handle) ->
+ send(Handle, info),
recv(Handle).
%%% --------------------------------------------------------------------
@@ -620,13 +616,13 @@ loop(Cpid, Data) ->
send(From, Result),
?MODULE:loop(Cpid, Data);
- {From, {conn_info, Items}} ->
+ {From, info} ->
Res =
case Data#eldap.ldaps of
true ->
- get_ssl_conn_info(Data#eldap.fd, Items);
+ #{socket => Data#eldap.fd, socket_type => ssl};
false ->
- {error, "Not an SSL connection"}
+ #{socket => Data#eldap.fd, socket_type => tcp}
end,
send(From, Res),
?MODULE:loop(Cpid, Data);
@@ -641,11 +637,6 @@ loop(Cpid, Data) ->
end.
-get_ssl_conn_info(SockFd, []) ->
- ssl:connection_information(SockFd);
-get_ssl_conn_info(SockFd, Items) ->
- ssl:connection_information(SockFd, Items).
-
%%% --------------------------------------------------------------------
%%% startTLS Request
%%% --------------------------------------------------------------------
diff --git a/lib/eldap/test/eldap_basic_SUITE.erl b/lib/eldap/test/eldap_basic_SUITE.erl
index 1c283a1f82..2b26ed52bd 100644
--- a/lib/eldap/test/eldap_basic_SUITE.erl
+++ b/lib/eldap/test/eldap_basic_SUITE.erl
@@ -46,7 +46,7 @@
more_add/1,
open_ret_val_error/1,
open_ret_val_success/1,
- plain_ldap_conn_info_error/1,
+ plain_ldap_socket_info/1,
search_filter_and/1,
search_filter_and_not/1,
search_filter_equalityMatch/1,
@@ -64,8 +64,7 @@
search_extensible_match_without_dn/1,
search_paged_results/1,
ssl_connection/1,
- ssl_conn_info/1,
- ssl_conn_info_items/1,
+ ssl_conn_socket_info/1,
start_tls_on_ssl_should_fail/1,
start_tls_twice_should_fail/1,
tcp_connection/1,
@@ -163,9 +162,8 @@ connection_tests() ->
client_side_add_timeout,
client_side_search_timeout,
close_after_tcp_error,
- ssl_conn_info,
- ssl_conn_info_items,
- plain_ldap_conn_info_error
+ ssl_conn_socket_info,
+ plain_ldap_socket_info
].
@@ -265,7 +263,7 @@ end_per_group(start_tls_api, Config) -> clear_db(Config);
end_per_group(_Group, Config) -> Config.
-init_per_testcase(TC, Config) when TC == ssl_connection; TC == ssl_conn_info; TC == ssl_conn_info_items ->
+init_per_testcase(TC, Config) when TC == ssl_connection; TC == ssl_conn_socket_info ->
case proplists:get_value(ssl_available,Config) of
true ->
SSL_Port = 9999,
@@ -429,7 +427,7 @@ ssl_connection(Config) ->
end.
%%%----------------------------------------------------------------
-ssl_conn_info(Config) ->
+ssl_conn_socket_info(Config) ->
Host = proplists:get_value(listen_host, Config),
Port = proplists:get_value(ssl_listen_port, Config),
Opts = proplists:get_value(tcp_connect_opts, Config),
@@ -439,36 +437,21 @@ ssl_conn_info(Config) ->
{timeout,5000},
{sslopts,SSLOpts}|Opts]) of
{ok,H} ->
- ?assertMatch({ok, _Data}, eldap:conn_info(H));
+ #{socket := Socket, socket_type := ssl} = eldap:info(H),
+ ?assertMatch({ok, _Data}, ssl:connection_information(Socket));
Other -> ct:fail("eldap:open failed: ~p",[Other])
end.
%%%----------------------------------------------------------------
-ssl_conn_info_items(Config) ->
- Host = proplists:get_value(listen_host, Config),
- Port = proplists:get_value(ssl_listen_port, Config),
- Opts = proplists:get_value(tcp_connect_opts, Config),
- SSLOpts = proplists:get_value(ssl_connect_opts, Config),
- case eldap:open([Host], [{port,Port},
- {ssl,true},
- {timeout,5000},
- {sslopts,SSLOpts}|Opts]) of
- {ok,H} ->
- ?assertEqual({ok, [{protocol, 'tlsv1.3'}, {session_resumption, false}]},
- eldap:conn_info(H, [protocol, session_resumption]));
- Other -> ct:fail("eldap:open failed: ~p",[Other])
- end.
-
-%%%----------------------------------------------------------------
-plain_ldap_conn_info_error(Config) ->
+plain_ldap_socket_info(Config) ->
Host = proplists:get_value(listen_host, Config),
Port = proplists:get_value(listen_port, Config),
Opts = proplists:get_value(tcp_connect_opts, Config),
T = 1000,
case eldap:open([Host], [{timeout,T},{port,Port}|Opts]) of
{ok,H} ->
- ?assertMatch({error, "Not an SSL connection"},
- eldap:conn_info(H));
+ ?assertMatch(#{socket := _, socket_type := tcp},
+ eldap:info(H));
Other -> ct:fail("eldap:open failed: ~p",[Other])
end.
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index d46b09cff7..8050b354bd 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -141,8 +141,7 @@
named_curve/0,
sign_scheme/0,
group/0,
- connection_info/0,
- connection_info_items/0
+ connection_info/0
]).
%% -------------------------------------------------------------------------------------------------------
--
2.35.3