[vlc-devel] [PATCH 1/2] dvdnav: Limit user information about insufficient permissions

David Fuhrmann david.fuhrmann at gmail.com
Fri May 1 16:20:48 CEST 2020



> Am 01.05.2020 um 15:43 schrieb Rémi Denis-Courmont <remi at remlab.net>:
> 
> Le perjantaina 1. toukokuuta 2020, 13.58.21 EEST david.fuhrmann at gmail.com <mailto:david.fuhrmann at gmail.com> a 
> écrit :
>> From: David Fuhrmann <dfuhrmann at videolan.org>
>> 
>> The mentioned security setting is only relevant for accessing
>> RAW block devices (/dev/xxx), which is one of the main use cases
>> for this module (accessing an optical drive).
>> It is not relevant for file or folder access.
>> 
>> Therefore limit the dialog to only show it in this case.
>> dvdnav does not provide a way to get the underlying error back
>> to this module, therefore the path is probed again to ensure
>> that the actual failure was EPERM.
>> ---
>> modules/access/dvdnav.c | 21 +++++++++++++++++----
>> 1 file changed, 17 insertions(+), 4 deletions(-)
>> 
>> diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c
>> index f082f1021b..558103eae3 100644
>> --- a/modules/access/dvdnav.c
>> +++ b/modules/access/dvdnav.c
>> @@ -377,10 +377,23 @@ static int AccessDemuxOpen ( vlc_object_t *p_this )
>>         msg_Warn( p_demux, "cannot open DVD (%s)", psz_file);
>> 
>> #ifdef __APPLE__
>> -        vlc_dialog_display_error( p_demux, _("Problem accessing a system
>> resource"), -            _("Potentially, macOS blocks access to your disc.
>> "
>> -              "Please open \"System Preferences\" -> \"Security & Privacy\"
>> " -              "and allow VLC to access your external media in \"Files
>> and Folders\" section."));
>> +        /* This is only relevant when accessing
>> RAW block devices */
>> +        if( forced && !strncasecmp( psz_file,
>> "/dev/", 5) )
> 
> That's a very dubious way to identify device nodes.

A better way in theory is to open() and stat() the path to check if this is a block device. But this does not work because the open() syscall is already rejected by the OS in this case, as seen in the next lines.

Does anybody knows another different way to check if a path is a device node, without opening the file?

> 
>> +        {
>> +            int fd = vlc_open( psz_file, O_RDONLY | O_NONBLOCK );
>> +            bool permissionError = ( fd == -1 && errno == EPERM );
>> +            if( fd != -1 )
>> +                vlc_close( fd );
> 
> And this reinvents access for no obvious reasons.

I think I tried to explain the reasons in the commit message.

My assumption is that the dvdnav library does not provide any guarantee that errno is set correctly after dvdnav_open fails. At least I did not find anything in that regard.

If this assumption is wrong, and dvdnav, dvdread, and also dvdcss libraries provide this guarantee, then I could probably directly use errno after dvdnav_open failure.

> 
>> +
>> +            if( permissionError )
>> +            {
>> +                msg_Err( p_demux, "Path %s cannot be opened due to
>> unsufficient permissions", psz_file ); +               
>> vlc_dialog_display_error( p_demux, _("Problem accessing a system
>> resource"), +                                         _("Potentially, macOS
>> blocks access to your disc. " +                                          
>> "Please open \"System Preferences\" -> \"Security & Privacy\" " +          
>>                                "and allow VLC to access your external
>> media in \"Files and Folders\" section.")); +            }
>> +        }
>> #endif
>>         goto bailout;
>>     }
> 
> -- 
> レミ・デニ-クールモン
> http://www.remlab.net/ <http://www.remlab.net/>
> 
> 
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel <https://mailman.videolan.org/listinfo/vlc-devel>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20200501/6b5d31c7/attachment.html>


More information about the vlc-devel mailing list