File 0987-Correct-sockname-handling-for-DTLS.patch of Package erlang

From 5e4627a4c34c834b7a766bfeccca16f6f71ade61 Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Fri, 15 Aug 2025 09:46:59 +0200
Subject: [PATCH] Correct sockname handling for DTLS

Closes #10097
---
 lib/ssl/src/dtls_socket.erl     |  4 ++-
 lib/ssl/test/dtls_api_SUITE.erl | 45 ++++++++++++++++++++++++++++++---
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/lib/ssl/src/dtls_socket.erl b/lib/ssl/src/dtls_socket.erl
index 7a3a054357..4cb9141bf2 100644
--- a/lib/ssl/src/dtls_socket.erl
+++ b/lib/ssl/src/dtls_socket.erl
@@ -215,7 +215,9 @@ peername(gen_udp, {Client, _Socket}) ->
     {ok, Client};
 peername(Transport, Socket) ->
     Transport:peername(Socket).
-sockname(gen_udp, {_, {_,Socket}}) ->
+sockname(gen_udp, {Listener, {_Client, Socket}}) when is_pid(Listener) ->
+    inet:sockname(Socket);
+sockname(gen_udp, {_Client, Socket}) ->
     inet:sockname(Socket);
 sockname(gen_udp, Socket) ->
     inet:sockname(Socket);
diff --git a/lib/ssl/test/dtls_api_SUITE.erl b/lib/ssl/test/dtls_api_SUITE.erl
index 7b54c7f920..a6ca7a5eb4 100644
--- a/lib/ssl/test/dtls_api_SUITE.erl
+++ b/lib/ssl/test/dtls_api_SUITE.erl
@@ -35,7 +35,8 @@
 
 %% Testcases
 -export([
-         replay_window/0, replay_window/1,
+         replay_window/0,
+         replay_window/1,
          dtls_listen_owner_dies/0,
          dtls_listen_owner_dies/1,
          dtls_listen_close/0,
@@ -56,8 +57,11 @@
          dtls_listen_two_sockets_5/1,
          dtls_listen_two_sockets_6/0,
          dtls_listen_two_sockets_6/1,
-         client_restarts/0, client_restarts/1,
-         client_restarts_multiple_acceptors/1
+         client_restarts/0,
+         client_restarts/1,
+         client_restarts_multiple_acceptors/1,
+         sockname/0,
+         sockname/1
         ]).
 
 -include_lib("ssl/src/ssl_internal.hrl").
@@ -93,7 +97,8 @@ api_tests() ->
      dtls_listen_two_sockets_5,
      dtls_listen_two_sockets_6,
      client_restarts,
-     client_restarts_multiple_acceptors
+     client_restarts_multiple_acceptors,
+     sockname
     ].
 
 init_per_suite(Config0) ->
@@ -568,6 +573,38 @@ client_restarts_multiple_acceptors(Config) ->
     ssl_test_lib:close(Client0),
     ok.
 
+sockname() ->
+    [{doc,"Test API function sockname/1"}].
+sockname(Config) when is_list(Config) ->
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
+    {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+    Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+					{from, self()},
+			   {mfa, {ssl, sockname, []}},
+			   {options, ServerOpts}]),
+    Port = ssl_test_lib:inet_port(Server),
+    Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+					{host, Hostname},
+                                        {from, self()},
+                                        {mfa, {ssl, sockname, []}},
+                                        {options, [{port, 0} | ClientOpts]}]),
+
+    ClientPort = ssl_test_lib:inet_port(Client),
+
+    NoBind = {0,0,0,0}, %% Normal UDP socket will not have an IP-address bound to it
+
+    ServerMsg = {ok, {NoBind, Port}},
+    ClientMsg = {ok, {NoBind, ClientPort}},
+
+    ?CT_LOG("Client ~p  Server ~p ~n", [Client, Server]),
+
+    ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
+
+    ssl_test_lib:close(Server),
+    ssl_test_lib:close(Client).
+
+
 %%--------------------------------------------------------------------
 %% Internal functions ------------------------------------------------
 %%--------------------------------------------------------------------
-- 
2.43.0

openSUSE Build Service is sponsored by