mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
refactor: add the process check
This commit is contained in:
@@ -15,13 +15,25 @@ async fn handle_read(
|
||||
read_stream: ReadHalf<UnixStream>,
|
||||
server_context: Arc<ServerContext>,
|
||||
response_tx: mpsc::Sender<Response>,
|
||||
peer_pid: Option<i32>,
|
||||
cancel_token: CancellationToken,
|
||||
) {
|
||||
let mut reader: Reader = read_stream.into();
|
||||
let mut authenticated: Option<bool> = None;
|
||||
|
||||
loop {
|
||||
match reader.read::<Request>().await {
|
||||
Ok(request) => {
|
||||
if authenticated.is_none() {
|
||||
authenticated = Some(authenticate(peer_pid));
|
||||
}
|
||||
|
||||
if !authenticated.unwrap_or(false) {
|
||||
println!("Client not authenticated");
|
||||
cancel_token.cancel();
|
||||
break;
|
||||
}
|
||||
|
||||
println!("Received request: {:?}", request);
|
||||
let command = request.command();
|
||||
let context = server_context.clone().into();
|
||||
@@ -114,6 +126,7 @@ async fn send_status(status_rx: &watch::Receiver<VpnStatus>, response_tx: &mpsc:
|
||||
}
|
||||
|
||||
pub(crate) async fn handle_connection(socket: UnixStream, context: Arc<ServerContext>) {
|
||||
let peer_pid = peer_pid(&socket);
|
||||
let (read_stream, write_stream) = io::split(socket);
|
||||
let (response_tx, response_rx) = mpsc::channel::<Response>(32);
|
||||
let cancel_token = CancellationToken::new();
|
||||
@@ -123,6 +136,7 @@ pub(crate) async fn handle_connection(socket: UnixStream, context: Arc<ServerCon
|
||||
read_stream,
|
||||
context.clone(),
|
||||
response_tx.clone(),
|
||||
peer_pid,
|
||||
cancel_token.clone(),
|
||||
));
|
||||
|
||||
@@ -142,3 +156,19 @@ pub(crate) async fn handle_connection(socket: UnixStream, context: Arc<ServerCon
|
||||
|
||||
println!("Connection closed")
|
||||
}
|
||||
|
||||
fn peer_pid(socket: &UnixStream) -> Option<i32> {
|
||||
match socket.peer_cred() {
|
||||
Ok(ucred) => ucred.pid(),
|
||||
Err(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn authenticate(peer_pid: Option<i32>) -> bool {
|
||||
if let Some(pid) = peer_pid {
|
||||
println!("Peer PID: {}", pid);
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user