@@ -303,12 +303,30 @@ fn test_scm_credentials() {
303
303
#[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
304
304
#[ test]
305
305
fn test_scm_credentials_and_rights ( ) {
306
+ use nix:: sys:: socket:: CmsgSpace ;
307
+ use libc;
308
+
309
+ test_impl_scm_credentials_and_rights ( CmsgSpace :: < ( libc:: ucred , CmsgSpace < RawFd > ) > :: new ( ) ) ;
310
+ }
311
+
312
+ /// Ensure that passing a `CmsgSpace` with too much space for the received
313
+ /// messages still works.
314
+ #[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
315
+ #[ test]
316
+ fn test_too_large_cmsgspace ( ) {
317
+ use nix:: sys:: socket:: CmsgSpace ;
318
+
319
+ test_impl_scm_credentials_and_rights ( CmsgSpace :: < [ u8 ; 1024 ] > :: new ( ) ) ;
320
+ }
321
+
322
+ #[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
323
+ fn test_impl_scm_credentials_and_rights < T > ( mut space : :: nix:: sys:: socket:: CmsgSpace < T > ) {
306
324
use libc;
307
325
use nix:: sys:: uio:: IoVec ;
308
326
use nix:: unistd:: { pipe, read, write, close, getpid, getuid, getgid} ;
309
327
use nix:: sys:: socket:: { socketpair, sendmsg, recvmsg, setsockopt,
310
328
AddressFamily , SockType , SockFlag ,
311
- ControlMessage , CmsgSpace , MsgFlags } ;
329
+ ControlMessage , MsgFlags } ;
312
330
use nix:: sys:: socket:: sockopt:: PassCred ;
313
331
314
332
let ( send, recv) = socketpair ( AddressFamily :: Unix , SockType :: Stream , None , SockFlag :: empty ( ) )
@@ -338,8 +356,7 @@ fn test_scm_credentials_and_rights() {
338
356
{
339
357
let mut buf = [ 0u8 ; 5 ] ;
340
358
let iov = [ IoVec :: from_mut_slice ( & mut buf[ ..] ) ] ;
341
- let mut cmsgspace: CmsgSpace < ( libc:: ucred , CmsgSpace < RawFd > ) > = CmsgSpace :: new ( ) ;
342
- let msg = recvmsg ( recv, & iov, Some ( & mut cmsgspace) , MsgFlags :: empty ( ) ) . unwrap ( ) ;
359
+ let msg = recvmsg ( recv, & iov, Some ( & mut space) , MsgFlags :: empty ( ) ) . unwrap ( ) ;
343
360
let mut received_cred = None ;
344
361
345
362
assert_eq ! ( msg. cmsgs( ) . count( ) , 2 ) ;
0 commit comments