|
45 | 45 | exec_direct_with_io_in_sshc/1,
|
46 | 46 | exec_with_io_in_sshc/1,
|
47 | 47 | tunnel_in_erlclient_erlserver/1,
|
| 48 | + tunnel_in_erlclient_erlserver_allowed/1, |
| 49 | + tunnel_in_erlclient_erlserver_denied/1, |
48 | 50 | tunnel_in_erlclient_openssh_server/1,
|
49 | 51 | tunnel_in_non_erlclient_erlserver/1,
|
50 | 52 | tunnel_out_erlclient_erlserver/1,
|
@@ -74,6 +76,8 @@ all() ->
|
74 | 76 |
|
75 | 77 | groups() ->
|
76 | 78 | [{erlang_client, [], [tunnel_in_erlclient_erlserver,
|
| 79 | + tunnel_in_erlclient_erlserver_allowed, |
| 80 | + tunnel_in_erlclient_erlserver_denied, |
77 | 81 | tunnel_out_erlclient_erlserver,
|
78 | 82 | {group, tunnel_distro_server},
|
79 | 83 | erlang_shell_client_openssh_server,
|
@@ -414,6 +418,59 @@ tunnel_in_erlclient_erlserver(Config) ->
|
414 | 418 |
|
415 | 419 | test_tunneling(ToSock, ListenHost, ListenPort).
|
416 | 420 |
|
| 421 | +%%-------------------------------------------------------------------- |
| 422 | +tunnel_in_erlclient_erlserver_allowed(Config) -> |
| 423 | + SystemDir = proplists:get_value(data_dir, Config), |
| 424 | + UserDir = proplists:get_value(priv_dir, Config), |
| 425 | + {ToSock, ToHost, ToPort} = tunneling_listner(), |
| 426 | + Self = self(), |
| 427 | + AllowedFun = fun(HostToConnect, PortToConnect) -> |
| 428 | + Self ! {allowed, {HostToConnect, PortToConnect}}, |
| 429 | + true |
| 430 | + end, |
| 431 | + {_Pid, Host, Port} = ssh_test_lib:daemon([{tcpip_tunnel_in, AllowedFun}, |
| 432 | + {system_dir, SystemDir}, |
| 433 | + {user_dir, UserDir}, |
| 434 | + {user_passwords, [{"foo", "bar"}]}, |
| 435 | + {failfun, fun ssh_test_lib:failfun/2}]), |
| 436 | + C = ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true}, |
| 437 | + {user_dir, UserDir}, |
| 438 | + {user,"foo"},{password,"bar"}, |
| 439 | + {user_interaction, false}]), |
| 440 | + |
| 441 | + ListenHost = inet:ntoa({127,0,0,1}), |
| 442 | + {ok,ListenPort} = ssh:tcpip_tunnel_to_server(C, ListenHost,0, ToHost, ToPort, 2000), |
| 443 | + test_tunneling(ToSock, ListenHost, ListenPort), |
| 444 | + {allowed, {ListenHost, ToPort}} = receive X -> X after 500 -> timeout end, |
| 445 | + {allowed, {ListenHost, ToPort}} = receive Y -> Y after 500 -> timeout end. |
| 446 | + |
| 447 | +%%-------------------------------------------------------------------- |
| 448 | +tunnel_in_erlclient_erlserver_denied(Config) -> |
| 449 | + SystemDir = proplists:get_value(data_dir, Config), |
| 450 | + UserDir = proplists:get_value(priv_dir, Config), |
| 451 | + {ToSock, ToHost, ToPort} = tunneling_listner(), |
| 452 | + Self = self(), |
| 453 | + DeniedFun = fun(HostToConnect, PortToConnect) -> |
| 454 | + Self ! {denied, {HostToConnect, PortToConnect}}, |
| 455 | + denied |
| 456 | + end, |
| 457 | + {_Pid, Host, Port} = ssh_test_lib:daemon([{tcpip_tunnel_in, AllowedFun}, |
| 458 | + {system_dir, SystemDir}, |
| 459 | + {user_dir, UserDir}, |
| 460 | + {user_passwords, [{"foo", "bar"}]}, |
| 461 | + {failfun, fun ssh_test_lib:failfun/2}]), |
| 462 | + C = ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true}, |
| 463 | + {user_dir, UserDir}, |
| 464 | + {user,"foo"},{password,"bar"}, |
| 465 | + {user_interaction, false}]), |
| 466 | + |
| 467 | + ListenHost = inet:ntoa({127,0,0,1}), |
| 468 | + {ok,ListenPort} = ssh:tcpip_tunnel_to_server(C, ListenHost,0, ToHost, ToPort, 2000), |
| 469 | + {ok, Sock} = gen_tcp:connect(ListenHost, ListenPort, [{active, false}]), |
| 470 | + {denied, {ListenHost, ToPort}} = receive Y -> Y after 500 -> timeout end, |
| 471 | + {error, timeout} = gen_tcp:accept(ToSock, 2000), |
| 472 | + {error, closed} = gen_tcp:recv(Sock, 0, 5000). |
| 473 | + |
417 | 474 | %%--------------------------------------------------------------------
|
418 | 475 | tunnel_in_erlclient_openssh_server(_Config) ->
|
419 | 476 | C = ssh_test_lib:connect(?SSH_DEFAULT_PORT, []),
|
|
0 commit comments