static int mount_point_prefix_match_0( const char * m_path,uid_t uid,string_t * m_point,int home_prefix ) { int st ; /* * zuluCryptGetUserName() is defined in ../lib/user_home_path.c */ string_t uname ; /* * below constant are set in ../constants.h */ const char * str ; if( home_prefix ){ uname = zuluCryptGetUserHomePath( uid ) ; str = StringContent( uname ) ; }else{ uname = zuluCryptGetUserName( uid ) ; StringPrepend( uname,"/run/media/private/" ) ; str = StringAppendChar( uname,'/' ) ; } st = StringPrefixEqual( m_path,str ) ; if( m_point ){ *m_point = uname ; }else{ StringDelete( &uname ) ; } return st ; }
static string_t create_home_mount_point( const char * device,const char * label,uid_t uid ) { /* * zuluCryptGetUserHomePath() is defined in ../lib/user_home_path.c */ string_t path = zuluCryptGetUserHomePath( uid ) ; if( label == NULL ){ return _create_home_default_mount_point( device,uid,path ) ; }else{ return _create_home_custom_mount_point( label,uid,path ) ; } }
/* * return values: * 5 - couldnt get key from the socket * 4 -permission denied * 1 invalid path * 2 insufficient memory to open file * 0 success */ int zuluCryptGetPassFromFile( const char * path,uid_t uid,string_t * st ) { /* * zuluCryptGetUserHomePath() is defined in ../lib/user_home_path.c */ string_t p = zuluCryptGetUserHomePath( uid ) ; const char * z = StringAppend( p,".zuluCrypt-socket" ) ; size_t s = StringLength( p ) ; int m = StringPrefixMatch( path,z,s ) ; StringDelete( &p ) ; if( m ){ /* * zuluCryptPrepareSocketPath() is defined in path_access.c */ zuluCryptPrepareSocketPath( uid ) ; zuluCryptSecurityDropElevatedPrivileges() ; /* * path that starts with $HOME/.zuluCrypt-socket is treated not as a path to key file but as path * to a local socket to get a passphrase */ /* * zuluCryptGetKeyFromSocket() is defined in ../pluginManager/zuluCryptPluginManager.c */ zuluCryptGetKeyFromSocket( path,st,uid ) ; return 0 ; }else{ zuluCryptSecurityDropElevatedPrivileges() ; /* * 8192000 bytes is the default cryptsetup maximum keyfile size */ m = StringGetFromFileMemoryLocked( st,path,0,8192000 ) ; switch( m ){ case 0 : return 0 ; case 1 : return 4 ; case 2 : return 2 ; } /* * not supposed to get here */ return -1 ; } }
void zuluCryptPrepareSocketPath( uid_t uid ) { string_t st = zuluCryptGetUserHomePath( uid ) ; const char * e = StringAppend( st,"/.zuluCrypt-socket" ) ; zuluCryptSecurityGainElevatedPrivileges() ; mkdir( e,0777 ) ; if( chown( e,uid,uid ) ){} if( chmod( e,0777 ) ){} zuluCryptSecurityDropElevatedPrivileges() ; StringDelete( &st ) ; }