[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