MCPcopy Create free account
hub / github.com/bytecodealliance/rustix / test_unix_peercred_implicit

Function test_unix_peercred_implicit

tests/net/unix.rs:692–745  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

690#[cfg(all(feature = "pipe", feature = "process", linux_kernel))]
691#[test]
692fn test_unix_peercred_implicit() {
693 crate::init();
694
695 use rustix::io::{IoSlice, IoSliceMut};
696 use rustix::net::{
697 recvmsg, sendmsg, sockopt, RecvAncillaryBuffer, RecvAncillaryMessage, RecvFlags,
698 ReturnFlags, SendAncillaryBuffer, SendFlags, SocketFlags,
699 };
700 use rustix::process::{getgid, getpid, getuid};
701
702 let (send_sock, recv_sock) = rustix::net::socketpair(
703 AddressFamily::UNIX,
704 SocketType::STREAM,
705 SocketFlags::CLOEXEC,
706 None,
707 )
708 .unwrap();
709
710 sockopt::set_socket_passcred(&recv_sock, true).unwrap();
711
712 let ucred = sockopt::socket_peercred(&send_sock).unwrap();
713 assert_eq!(ucred.pid, getpid());
714 assert_eq!(ucred.uid, getuid());
715 assert_eq!(ucred.gid, getgid());
716
717 let mut cmsg_buffer = SendAncillaryBuffer::default();
718
719 sendmsg(
720 &send_sock,
721 &[IoSlice::new(b"cred")],
722 &mut cmsg_buffer,
723 SendFlags::empty(),
724 )
725 .unwrap();
726
727 let mut cmsg_space = [MaybeUninit::uninit(); rustix::cmsg_space!(ScmCredentials(1))];
728 let mut cmsg_buffer = RecvAncillaryBuffer::new(cmsg_space.as_mut_slice());
729
730 let mut buffer = [0; BUFFER_SIZE];
731 let result = recvmsg(
732 &recv_sock,
733 &mut [IoSliceMut::new(&mut buffer)],
734 &mut cmsg_buffer,
735 RecvFlags::empty(),
736 )
737 .unwrap();
738
739 assert_eq!(result.flags, ReturnFlags::empty());
740
741 match cmsg_buffer.drain().next().unwrap() {
742 RecvAncillaryMessage::ScmCredentials(ucred2) => assert_eq!(ucred2, ucred),
743 _ => panic!("Unexpected ancillary message"),
744 };
745}
746
747/// Like `test_unix_msg_with_scm_rights`, but with multiple file descriptors
748/// over multiple control messages.

Callers

nothing calls this directly

Calls 9

drainMethod · 0.80
initFunction · 0.70
socketpairFunction · 0.50
set_socket_passcredFunction · 0.50
socket_peercredFunction · 0.50
sendmsgFunction · 0.50
recvmsgFunction · 0.50
as_mut_sliceMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected