@@ -10,10 +10,11 @@ use crate::http_routes;
1010use crate :: rpc_service:: { AppState , ExternalRpcHandler , InternalRpcHandler , InternalRpcHandlerV0 } ;
1111use crate :: socket_activation:: { ActivatedSockets , ActivatedUnixListener } ;
1212use anyhow:: { anyhow, Context , Result } ;
13+ use ra_rpc:: rocket_helper:: UnixPeerCredListener ;
1314use rocket:: {
1415 fairing:: AdHoc ,
1516 figment:: Figment ,
16- listener:: { Bind , DefaultListener } ,
17+ listener:: { unix :: UnixListener , Bind , DefaultListener , Endpoint } ,
1718} ;
1819use rocket_vsock_listener:: VsockListener ;
1920use sd_notify:: { notify as sd_notify, NotifyState } ;
@@ -43,7 +44,7 @@ async fn run_internal_v0(
4344
4445 if let Some ( std_listener) = activated_socket {
4546 info ! ( "Using systemd-activated socket for tappd.sock" ) ;
46- let listener = ActivatedUnixListener :: new ( std_listener) ?;
47+ let listener = UnixPeerCredListener :: new ( ActivatedUnixListener :: new ( std_listener) ?) ;
4748 sock_ready_tx. send ( ( ) ) . ok ( ) ;
4849 ignite
4950 . launch_on ( listener)
@@ -52,14 +53,29 @@ async fn run_internal_v0(
5253 } else {
5354 let endpoint = DefaultListener :: bind_endpoint ( & ignite)
5455 . map_err ( |err| anyhow ! ( "Failed to get endpoint: {err}" ) ) ?;
55- let listener = DefaultListener :: bind ( & ignite)
56- . await
57- . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?;
5856 sock_ready_tx. send ( ( ) ) . ok ( ) ;
59- ignite
60- . launch_on ( listener)
61- . await
62- . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
57+ match endpoint {
58+ Endpoint :: Unix ( _) => {
59+ let listener = UnixPeerCredListener :: new (
60+ <UnixListener as Bind >:: bind ( & ignite)
61+ . await
62+ . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?,
63+ ) ;
64+ ignite
65+ . launch_on ( listener)
66+ . await
67+ . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
68+ }
69+ _ => {
70+ let listener = DefaultListener :: bind ( & ignite)
71+ . await
72+ . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?;
73+ ignite
74+ . launch_on ( listener)
75+ . await
76+ . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
77+ }
78+ }
6379 }
6480 Ok ( ( ) )
6581}
@@ -80,7 +96,7 @@ async fn run_internal(
8096
8197 if let Some ( std_listener) = activated_socket {
8298 info ! ( "Using systemd-activated socket for dstack.sock" ) ;
83- let listener = ActivatedUnixListener :: new ( std_listener) ?;
99+ let listener = UnixPeerCredListener :: new ( ActivatedUnixListener :: new ( std_listener) ?) ;
84100 sock_ready_tx. send ( ( ) ) . ok ( ) ;
85101 ignite
86102 . launch_on ( listener)
@@ -89,14 +105,29 @@ async fn run_internal(
89105 } else {
90106 let endpoint = DefaultListener :: bind_endpoint ( & ignite)
91107 . map_err ( |err| anyhow ! ( "Failed to get endpoint: {err}" ) ) ?;
92- let listener = DefaultListener :: bind ( & ignite)
93- . await
94- . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?;
95108 sock_ready_tx. send ( ( ) ) . ok ( ) ;
96- ignite
97- . launch_on ( listener)
98- . await
99- . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
109+ match endpoint {
110+ Endpoint :: Unix ( _) => {
111+ let listener = UnixPeerCredListener :: new (
112+ <UnixListener as Bind >:: bind ( & ignite)
113+ . await
114+ . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?,
115+ ) ;
116+ ignite
117+ . launch_on ( listener)
118+ . await
119+ . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
120+ }
121+ _ => {
122+ let listener = DefaultListener :: bind ( & ignite)
123+ . await
124+ . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?;
125+ ignite
126+ . launch_on ( listener)
127+ . await
128+ . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
129+ }
130+ }
100131 }
101132 Ok ( ( ) )
102133}
0 commit comments