]> git.mxchange.org Git - flightgear.git/commit
Use SGPath::realpath() on the value supplied for --aircraft-dir
authorFlorent Rougon <f.rougon@free.fr>
Tue, 6 Oct 2015 10:20:54 +0000 (12:20 +0200)
committerFlorent Rougon <f.rougon@free.fr>
Tue, 6 Oct 2015 19:54:50 +0000 (21:54 +0200)
commit7198dec355144fbb0eaccb39f0c241dd07ebaee0
treeb4e2cc8848d07129163ca3cba56166728fde4c6a
parentb49dd70de91fb13e0c411b9df96971d6f1a0f275
Use SGPath::realpath() on the value supplied for --aircraft-dir

* Before setting /sim/aircraft-dir from the --aircraft-dir option,
canonicalize its value with SGPath::realpath() as is already done in
FGGlobals::append_aircraft_path() for the paths given with --fg-aircraft
or via the FG_AIRCRAFT environment variable.

* This fixes a bug when --aircraft-dir is used, due to the fact that
fgValidatePath() canonicalizes its 'path' argument before matching it
against the allowed patterns, and therefore will not validate paths
under the directory specified with --aircraft-dir if this directory has
been given in a non-canonical form by the user (e.g., containing at
least one symlink component).

* This fix does not lower security: the path which is canonicalized has
been explicitely given by the user. This operation is already done for
all paths specified with --fg-aircraft or via the FG_AIRCRAFT
environment variable, via Options::initPaths() which calls
FGGlobals::append_aircraft_paths().

* To reproduce the bug, create a symlink (e.g., /tmp/aircrafts) to a
directory suitable for --fg-aircraft, then run:

  fgfs ... --fg-aircraft=/tmp/aircrafts \
           --aircraft-dir=/tmp/aircrafts/SenecaII --aircraft=SenecaII

This will trigger many failures such as:

  loadxml: reading '/tmp/aircrafts/SenecaII/Dialogs/registration.xml'
  denied (unauthorized directory - authorization no longer follows
  symlinks; to authorize reading additional directories, add them to
  --fg-aircraft)

(from do_load_xml_to_proptree() in flightgear/src/Main/fg_commands.cxx)

I have also tested this with the ec130b4 and the 777-200ER. Same
problem, same fix.
src/Main/options.cxx