1+ use super :: CurrentUser ;
12use crate :: cmd:: KillFailedError ;
23use failure:: Error ;
34use nix:: {
@@ -24,20 +25,21 @@ pub(crate) fn kill_process(id: u32) -> Result<(), KillFailedError> {
2425 }
2526}
2627
27- pub ( crate ) fn current_user ( ) -> Option < u32 > {
28- Some ( Uid :: effective ( ) . into ( ) )
29- }
30-
31- fn current_group ( ) -> u32 {
32- Gid :: effective ( ) . into ( )
28+ pub ( crate ) fn current_user ( ) -> Option < CurrentUser > {
29+ Some ( CurrentUser {
30+ user_id : Uid :: effective ( ) . into ( ) ,
31+ group_id : Gid :: effective ( ) . into ( ) ,
32+ } )
3333}
3434
3535fn executable_mode_for ( path : & Path ) -> Result < u32 , Error > {
3636 let metadata = path. metadata ( ) ?;
3737
38- if metadata. uid ( ) == current_user ( ) . unwrap ( ) {
38+ let user = current_user ( ) . unwrap ( ) ;
39+
40+ if metadata. uid ( ) == user. user_id {
3941 Ok ( EXECUTABLE_BITS << 6 )
40- } else if metadata. gid ( ) == current_group ( ) {
42+ } else if metadata. gid ( ) == user . group_id {
4143 Ok ( EXECUTABLE_BITS << 3 )
4244 } else {
4345 Ok ( EXECUTABLE_BITS )
@@ -65,6 +67,7 @@ pub(crate) fn make_executable<P: AsRef<Path>>(path: P) -> Result<(), Error> {
6567
6668#[ cfg( test) ]
6769mod tests {
70+ use super :: CurrentUser ;
6871 use nix:: unistd:: { Gid , Uid } ;
6972 use std:: fs:: File ;
7073 use std:: os:: unix:: process:: ExitStatusExt ;
@@ -82,12 +85,13 @@ mod tests {
8285
8386 #[ test]
8487 fn test_current_user ( ) {
85- assert_eq ! ( super :: current_user( ) , Some ( u32 :: from( Uid :: effective( ) ) ) ) ;
86- }
87-
88- #[ test]
89- fn test_current_group ( ) {
90- assert_eq ! ( super :: current_group( ) , u32 :: from( Gid :: effective( ) ) ) ;
88+ assert_eq ! (
89+ super :: current_user( ) ,
90+ Some ( CurrentUser {
91+ user_id: u32 :: from( Uid :: effective( ) ) ,
92+ group_id: u32 :: from( Gid :: effective( ) ) ,
93+ } )
94+ ) ;
9195 }
9296
9397 #[ test]
0 commit comments