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

Rémi Denis-Courmont remi at remlab.net
Fri May 1 18:33:26 CEST 2020


Le perjantaina 1. toukokuuta 2020, 17.20.48 EEST David Fuhrmann a écrit :
> > 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.

I don't follow the logic here. So you cannot open the device node, and?

> 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.

Where? It just implies that the device node cannot be opened.

-- 
レミ・デニ-クールモン
http://www.remlab.net/





More information about the vlc-devel mailing list