File 3801-ssh-Remove-is_port-1-from-ssh.erl.patch of Package erlang

From 11026f963076e415021bcfcd56ac2107ddc7a215 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Mon, 29 Jun 2020 10:58:43 +0200
Subject: [PATCH 1/4] ssh: Remove is_port/1 from ssh.erl

---
 lib/ssh/src/ssh.erl | 77 ++++++++++++++++++++++++++++++---------------
 1 file changed, 52 insertions(+), 25 deletions(-)

diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index d4b492d61c..023f6d884d 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -45,6 +45,9 @@
          tcpip_tunnel_to_server/5, tcpip_tunnel_to_server/6
 	]).
 
+%%% Internal export
+-export([is_host/2]).
+
 %%% "Deprecated" types export:
 -export_type([ssh_daemon_ref/0, ssh_connection_ref/0, ssh_channel_id/0]).
 -opaque ssh_daemon_ref()     :: daemon_ref().
@@ -119,8 +122,7 @@ stop() ->
       OpenTcpSocket :: open_socket(),
       Options :: client_options().
 
-connect(OpenTcpSocket, Options) when is_port(OpenTcpSocket),
-                                     is_list(Options) ->
+connect(OpenTcpSocket, Options) when is_list(Options) ->
     connect(OpenTcpSocket, Options, infinity).
 
 
@@ -129,8 +131,12 @@ connect(OpenTcpSocket, Options) when is_port(OpenTcpSocket),
            ; (host(), inet:port_number(), client_options()) ->
                      {ok,connection_ref()} | {error,term()}.
 
-connect(Socket, UserOptions, NegotiationTimeout) when is_port(Socket),
-                                                      is_list(UserOptions) ->
+connect(Host, Port, Options) when is_integer(Port),
+                                  Port>0,
+                                  is_list(Options) ->
+    connect(Host, Port, Options, infinity);
+
+connect(Socket, UserOptions, NegotiationTimeout) when is_list(UserOptions) ->
     case ssh_options:handle_options(client, UserOptions) of
 	{error, Error} ->
 	    {error, Error};
@@ -143,13 +149,7 @@ connect(Socket, UserOptions, NegotiationTimeout) when is_port(Socket),
                {error,SockError} ->
                    {error,SockError}
            end
-        end;
-
-connect(Host, Port, Options) when is_integer(Port),
-                                  Port>0,
-                                  is_list(Options) ->
-    Timeout = proplists:get_value(connect_timeout, Options, infinity),
-    connect(Host, Port, Options, Timeout).
+        end.
 
 
 -spec connect(Host, Port, Options, NegotiationTimeout) -> {ok,connection_ref()} | {error,term()} when
@@ -275,7 +276,10 @@ daemon(Port) ->
 
 -spec daemon(inet:port_number()|open_socket(), daemon_options()) -> {ok,daemon_ref()} | {error,term()}.
 
-daemon(Socket, UserOptions) when is_port(Socket) ->
+daemon(Port, UserOptions) when 0 =< Port,Port =< 65535 ->
+    daemon(any, Port, UserOptions);
+
+daemon(Socket, UserOptions) ->
     try
         #{} = Options = ssh_options:handle_options(server, UserOptions),
 
@@ -311,10 +315,7 @@ daemon(Socket, UserOptions) when is_port(Socket) ->
             {error,Error};
         _C:_E ->
             {error,{cannot_start_daemon,_C,_E}}
-    end;
-
-daemon(Port, UserOptions) when 0 =< Port, Port =< 65535 ->
-    daemon(any, Port, UserOptions).
+    end.
 
 
 -spec daemon(any | inet:ip_address(), inet:port_number(), daemon_options()) -> {ok,daemon_ref()} | {error,term()}
@@ -503,9 +504,6 @@ stop_daemon(Address, Port, Profile) ->
 %%--------------------------------------------------------------------
 -spec shell(open_socket() | host() | connection_ref()) ->  _.
 
-shell(Socket) when is_port(Socket) ->
-    shell(Socket, []);
-
 shell(ConnectionRef) when is_pid(ConnectionRef) ->
     case ssh_connection:session_channel(ConnectionRef, infinity) of
 	{ok,ChannelId}  ->
@@ -528,23 +526,37 @@ shell(ConnectionRef) when is_pid(ConnectionRef) ->
 	    Error
     end;
 
-shell(Host) ->
-    shell(Host, ?SSH_DEFAULT_PORT, []).
+shell(Dest) ->
+    case is_host(Dest, []) of
+        true ->
+            shell(Dest, ?SSH_DEFAULT_PORT, []);
+        false ->
+            %% Maybe socket
+            shell_socket(Dest, [])
+    end.
+
 
 
 -spec shell(open_socket() | host(), client_options()) ->  _.
 
-shell(Socket, Options) when is_port(Socket) ->
+shell(Dest, Options) ->
+    case is_host(Dest, Options) of
+        true ->
+            shell(Dest, ?SSH_DEFAULT_PORT, Options);
+        false ->
+            %% Maybe socket
+            shell_socket(Dest, Options)
+    end.
+
+shell_socket(Socket, Options) ->
     case connect(Socket, Options) of
         {ok,ConnectionRef} ->
             shell(ConnectionRef),
             close(ConnectionRef);
         Error ->
             Error
-    end;
-
-shell(Host, Options) ->
-    shell(Host, ?SSH_DEFAULT_PORT, Options).
+    end.
+    
 
 
 -spec shell(Host, Port, Options) -> _ when
@@ -813,6 +825,21 @@ map_ip(Fun, {address,Address}) ->
 map_ip(Fun, IPs) ->
     lists:map(Fun, IPs).
 
+%%%----------------------------------------------------------------
+is_host(X, Opts) ->
+    try is_host1(mangle_connect_address(X, Opts))
+    catch
+        _:_ -> false
+    end.
+            
+
+is_host1(L) when is_list(L) -> true; %% "string()"
+is_host1(T) when is_tuple(T), size(T)==4 -> lists:all(fun(I) -> 0=<I andalso I=<255 end,
+                                                      tuple_to_list(T));
+is_host1(T) when is_tuple(T), size(T)==16 -> lists:all(fun(I) -> 0=<I andalso I=<65535 end,
+                                                       tuple_to_list(T));
+is_host1(loopback) -> true.
+
 %%%----------------------------------------------------------------
 mangle_connect_address(A, SockOpts) ->
     mangle_connect_address1(A, proplists:get_value(inet6,SockOpts,false)).
-- 
2.26.2

openSUSE Build Service is sponsored by