@@ -356,13 +356,7 @@ fn main_inner() -> SrResult<()> {
356356 print ! ( " and group(s): " ) ;
357357 let groups = gids
358358 . iter ( )
359- . map ( |g| {
360- format ! (
361- "{} ({})" ,
362- g. name,
363- g. gid
364- )
365- } )
359+ . map ( |g| format ! ( "{} ({})" , g. name, g. gid) )
366360 . collect :: < Vec < _ > > ( )
367361 . join ( ", " ) ;
368362 println ! ( "{}" , groups) ;
@@ -413,22 +407,24 @@ fn main_inner() -> SrResult<()> {
413407 let cargs = args. cmd_args . clone ( ) ;
414408 let cfinal_path = execcfg. final_path . clone ( ) ;
415409 let cfinal_env = execcfg. env . clone ( ) ;
416- let command = unsafe { Command :: new ( & execcfg. final_path )
417- . pre_exec ( move || {
418- use crate :: finder:: api:: { Api , ApiEvent } ;
419- Api :: notify ( ApiEvent :: PreExec ( & args, & execcfg) ) . map_err ( |e| {
420- error ! ( "Failed to notify pre-exec event: {}" , e) ;
421- std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "Failed to notify pre-exec" )
422- } ) ?;
423- Ok ( ( ) )
424- } )
425- . args ( cargs. iter ( ) )
426- . env_clear ( )
427- . envs ( cfinal_env)
428- . stdin ( std:: process:: Stdio :: inherit ( ) )
429- . stdout ( std:: process:: Stdio :: inherit ( ) )
430- . stderr ( std:: process:: Stdio :: inherit ( ) )
431- . spawn ( & pty. pts ( ) . expect ( "Failed to get pts" ) ) } ;
410+ let command = unsafe {
411+ Command :: new ( & execcfg. final_path )
412+ . pre_exec ( move || {
413+ use crate :: finder:: api:: { Api , ApiEvent } ;
414+ Api :: notify ( ApiEvent :: PreExec ( & args, & execcfg) ) . map_err ( |e| {
415+ error ! ( "Failed to notify pre-exec event: {}" , e) ;
416+ std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "Failed to notify pre-exec" )
417+ } ) ?;
418+ Ok ( ( ) )
419+ } )
420+ . args ( cargs. iter ( ) )
421+ . env_clear ( )
422+ . envs ( cfinal_env)
423+ . stdin ( std:: process:: Stdio :: inherit ( ) )
424+ . stdout ( std:: process:: Stdio :: inherit ( ) )
425+ . stderr ( std:: process:: Stdio :: inherit ( ) )
426+ . spawn ( & pty. pts ( ) . expect ( "Failed to get pts" ) )
427+ } ;
432428 let mut command = match command {
433429 Ok ( command) => command,
434430 Err ( e) => {
@@ -482,11 +478,23 @@ fn set_capabilities(execcfg: &BestExecSettings) -> SrResult<()> {
482478}
483479
484480fn setuid_setgid ( execcfg : & BestExecSettings ) -> SrResult < ( ) > {
485- let gid = execcfg. cred . setgroups . as_ref ( ) . and_then ( |g| g. first ( ) . cloned ( ) ) . map ( |g| g. gid . as_raw ( ) ) ;
481+ let gid = execcfg
482+ . cred
483+ . setgroups
484+ . as_ref ( )
485+ . and_then ( |g| g. first ( ) . cloned ( ) )
486+ . map ( |g| g. gid . as_raw ( ) ) ;
486487 with_privileges ( & [ Cap :: SETUID , Cap :: SETGID ] , || {
487- capctl:: cap_set_ids ( execcfg. cred . setuid . as_ref ( ) . map ( |u| u. uid . as_raw ( ) ) , gid, execcfg. cred . setgroups . as_ref ( ) . map (
488- |g| g. iter ( ) . map ( |g| g. gid . as_raw ( ) ) . collect :: < Vec < _ > > ( ) ,
489- ) . as_deref ( ) ) ?;
488+ capctl:: cap_set_ids (
489+ execcfg. cred . setuid . as_ref ( ) . map ( |u| u. uid . as_raw ( ) ) ,
490+ gid,
491+ execcfg
492+ . cred
493+ . setgroups
494+ . as_ref ( )
495+ . map ( |g| g. iter ( ) . map ( |g| g. gid . as_raw ( ) ) . collect :: < Vec < _ > > ( ) )
496+ . as_deref ( ) ,
497+ ) ?;
490498 Ok ( ( ) )
491499 } )
492500 . map_err ( |e| {
@@ -497,11 +505,11 @@ fn setuid_setgid(execcfg: &BestExecSettings) -> SrResult<()> {
497505
498506#[ cfg( test) ]
499507mod tests {
508+ use super :: finder:: de:: CredOwnedData ;
500509 use capctl:: { Cap , CapSet } ;
501510 use libc:: getgid;
502511 use nix:: unistd:: { getgroups, getuid, Group , Pid , User } ;
503512 use rar_common:: database:: options:: SBounding ;
504- use super :: finder:: de:: CredOwnedData ;
505513
506514 use super :: * ;
507515
@@ -563,7 +571,12 @@ mod tests {
563571 capset. effective . add ( Cap :: SETGID ) ;
564572 capset. set_current ( ) . unwrap ( ) ;
565573 let execcfg = BestExecSettings :: builder ( )
566- . cred ( CredOwnedData :: builder ( ) . setuid ( User :: from_uid ( 1000 . into ( ) ) . unwrap ( ) . unwrap ( ) ) . setgroups ( vec ! [ Group :: from_gid( 1000 . into( ) ) . unwrap( ) . unwrap( ) ] ) . build ( ) )
574+ . cred (
575+ CredOwnedData :: builder ( )
576+ . setuid ( User :: from_uid ( 1000 . into ( ) ) . unwrap ( ) . unwrap ( ) )
577+ . setgroups ( vec ! [ Group :: from_gid( 1000 . into( ) ) . unwrap( ) . unwrap( ) ] )
578+ . build ( ) ,
579+ )
567580 . build ( ) ;
568581 setuid_setgid ( & execcfg) . unwrap ( ) ;
569582 assert_eq ! ( getuid( ) , execcfg. cred. setuid. unwrap( ) . uid) ;
0 commit comments