int zuluCryptEXECloseVolume( const char * dev,const char * mapping_name,uid_t uid ) { int st ; int i ; string_t p = StringVoid ; char * m_point = NULL ; struct stat xt ; const char * mapper ; /* * ZULUCRYPTlongMapperPath is set in ../constants.h * zuluCryptCreateMapperName() defined in ../lib/create_mapper_name.c */ p = zuluCryptCreateMapperName( dev,mapping_name,uid,ZULUCRYPTlongMapperPath ) ; mapper = StringContent( p ) ; if( stat( mapper,&xt ) != 0 ){ return zuluExit( 1,p ) ; } /* * zuluCryptBindUnmountVolume() is defined in ./bind.c */ switch( zuluCryptBindUnmountVolume( StringListVoid,mapper,uid ) ){ case 3 : return zuluExit( 7,p ) ; case 4 : return zuluExit( 8,p ) ; case 5 : return zuluExit( 9,p ) ; default: ; } zuluCryptSecurityGainElevatedPrivileges() ; /* * zuluCryptCloseVolume() is defined in ../lib/close_volume.c */ st = zuluCryptCloseVolume( mapper,&m_point ) ; if( st == 0 && m_point != NULL ){ for( i = 0 ; i < 2 ; i++ ){ if( rmdir( m_point ) == 0 ){ break ; }else{ sleep( 1 ) ; } } StringFree( m_point ) ; } zuluCryptSecurityDropElevatedPrivileges() ; return zuluExit( st,p ) ; }
int zuluCryptEXECloseVolume( const char * dev,const char * mapping_name,uid_t uid ) { int st ; int i ; string_t p = StringVoid ; char * m_point = NULL ; struct stat xt ; const char * mapper ; int r ; zuluCryptSecurityGainElevatedPrivileges() ; r = zuluCryptDeviceHasAgivenFileSystem( dev,zuluCryptBitLockerType() ) ; if( r == 1 ){ p = zuluCryptBitLockerFullMapperPath( uid,dev ) ; mapper = StringContent( p ) ; i = stat( mapper,&xt ) ; zuluCryptSecurityDropElevatedPrivileges() ; if( i != 0 ){ return zuluExit( 1,p ) ; } }else{ zuluCryptSecurityDropElevatedPrivileges() ; /* * ZULUCRYPTlongMapperPath is set in ../constants.h * zuluCryptCreateMapperName() defined in ../lib/create_mapper_name.c */ p = zuluCryptCreateMapperName( dev,mapping_name,uid,ZULUCRYPTlongMapperPath ) ; mapper = StringContent( p ) ; if( stat( mapper,&xt ) != 0 ){ return zuluExit( 1,p ) ; } } /* * zuluCryptBindUnmountVolume() is defined in ./bind.c */ switch( zuluCryptBindUnmountVolume( StringListVoid,mapper,uid ) ){ case 3 : return zuluExit( 7,p ) ; case 4 : return zuluExit( 8,p ) ; case 5 : return zuluExit( 9,p ) ; default: ; } zuluCryptSecurityGainElevatedPrivileges() ; /* * zuluCryptCloseVolume() is defined in ../lib/close_volume.c * * zuluCryptReuseMountPoint() is defined in create_mount_point.c */ if( r == 1 ){ if( zuluCryptReuseMountPoint() ){ st = zuluCryptBitLockerlock( p,NULL ) ; }else{ st = zuluCryptBitLockerlock( p,&m_point ) ; } }else{ if( zuluCryptReuseMountPoint() ){ st = zuluCryptCloseVolume( mapper,NULL ) ; }else{ st = zuluCryptCloseVolume( mapper,&m_point ) ; } } if( st == 0 && m_point != NULL ){ for( i = 0 ; i < 2 ; i++ ){ if( rmdir( m_point ) == 0 ){ break ; }else{ sleep( 1 ) ; } } } StringFree( m_point ) ; zuluCryptSecurityDropElevatedPrivileges() ; return zuluExit( st,p ) ; }