diff --git a/src/sys/unix.rs b/src/sys/unix.rs index 95869f52..51ef4a5d 100644 --- a/src/sys/unix.rs +++ b/src/sys/unix.rs @@ -172,6 +172,8 @@ pub(crate) use libc::SO_LINGER; target_os = "watchos", ))] pub(crate) use libc::SO_LINGER_SEC as SO_LINGER; +#[cfg(target_os = "linux")] +pub(crate) use libc::SO_PASSCRED; pub(crate) use libc::{ ip_mreq as IpMreq, linger, IPPROTO_IP, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, IPV6_MULTICAST_IF, IPV6_MULTICAST_LOOP, IPV6_UNICAST_HOPS, IPV6_V6ONLY, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP, @@ -179,8 +181,6 @@ pub(crate) use libc::{ SO_BROADCAST, SO_ERROR, SO_KEEPALIVE, SO_RCVBUF, SO_RCVTIMEO, SO_REUSEADDR, SO_SNDBUF, SO_SNDTIMEO, SO_TYPE, TCP_NODELAY, }; -#[cfg(target_os = "linux")] -pub(crate) use libc::SO_PASSCRED; #[cfg(not(any( target_os = "dragonfly", target_os = "haiku", diff --git a/tests/socket.rs b/tests/socket.rs index 1c83321a..89b79f5f 100644 --- a/tests/socket.rs +++ b/tests/socket.rs @@ -1680,3 +1680,19 @@ fn cookie() { Err(err) => panic!("Could not get socket cookie a second time, err: {err}"), } } + +#[cfg(all(unix, target_os = "linux"))] +#[test] +fn set_passcred() { + let socket = Socket::new(Domain::UNIX, Type::DGRAM, None).unwrap(); + assert!(!socket.passcred().unwrap()); + + socket.set_passcred(true).unwrap(); + assert!(socket.passcred().unwrap()); + + let socket = Socket::new(Domain::UNIX, Type::STREAM, None).unwrap(); + assert!(!socket.passcred().unwrap()); + + socket.set_passcred(true).unwrap(); + assert!(socket.passcred().unwrap()); +}