()
| 690 | #[cfg(all(feature = "pipe", feature = "process", linux_kernel))] |
| 691 | #[test] |
| 692 | fn 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. |
nothing calls this directly
no test coverage detected