#2511: Starting GRASS in mapset which is not owned by the user
------------------------------+---------------------------------------------
Reporter: wenzeslaus | Owner: grass-dev@…
Type: defect | Status: new
Priority: normal | Milestone: 7.1.0
Component: Startup | Version: unspecified
Keywords: access, database | Platform: Unspecified
Cpu: Unspecified |
------------------------------+---------------------------------------------
When GRASS is started in a mapset which is not owned by the current user,
the error handling is not very nice.
The following is behavior of 7.0 release branch approximately a month old
(r62598, before introduction of exceptions to `*_command` functions).
Error dialog after a start of GUI (note that the text and traceback does
not fit together):
{{{
Unable to get current geographic extent. Force quiting wxGUI. Please
manually run g.region to fix the problem.
Reason: 'version'
Traceback (most recent call last):
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/lmgr/frame.py", line 93, in __init__
grassVersion = grass.version()['version']
KeyError: 'version'
}}}
Terminal shows GRASS prompt and contains at that point "permission denied"
and "unable to get GRASS version" errors.
{{{
ERROR: MAPSET PERMANENT - permission denied
ERROR: MAPSET PERMANENT - permission denied
Unable to get GRASS version
GRASS_INFO_ERROR(28313,1): MAPSET PERMANENT - permission denied
GRASS_INFO_END(28313,1)
GRASS_INFO_ERROR(28314,1): MAPSET PERMANENT - permission denied
GRASS_INFO_END(28314,1)
GRASS_INFO_ERROR(28317,1): MAPSET PERMANENT - permission denied
GRASS_INFO_END(28317,1)
}}}
Finally, after clicking OK in the GUI error dialog, GUI ends with the
following traceback:
{{{
Traceback (most recent call last):
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/wxgui.py", line 140, in <module>
sys.exit(main())
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/wxgui.py", line 133, in main
app = GMApp(workspaceFile)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/wxgui.py", line 48, in __init__
wx.App.__init__(self, False)
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7981, in __init__
self._BootstrapApp()
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7555, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/wxgui.py", line 82, in OnInit
workspace = self.workspaceFile)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/lmgr/frame.py", line 221, in __init__
self.NewDisplay(show = False)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/lmgr/frame.py", line 1727, in NewDisplay
showMapDisplay = show)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/lmgr/layertree.py", line 176, in __init__
Map = self.Map)
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/mapdisp/frame.py", line 153, in __init__
self.statusbarManager.Update()
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/mapdisp/statusbar.py", line 227, in Update
item.Update() # mask, render
File "/home/vpetras/dev/futures/grass70_release/dist.x86_64-unknown-
linux-gnu/gui/wxpython/mapdisp/statusbar.py", line 810, in Update
mapset = grass.gisenv()['MAPSET'])['name']:
KeyError: 'name'
}}}
You can run commands in the system command line but you get "permission
denied".
{{{
g.list rast -p
ERROR: MAPSET PERMANENT - permission denied
}}}
However, this is not completely true because in my case, I can write
there, I just don't own it, so I think the message should be more precise
and contain information about different owner, e.g. "permission denied,
you are not a owner of this mapset". Maybe even better would be:
{{{
ERROR: Permission denied for mapset <%s> because you are not the owner
}}}
In trunk approximately 2 weeks old (r62885), GUI does not start but the
session in command line still starts. The error is coming from some call
of `tempfile()` from `render.py`.
{{{
ERROR: MAPSET PERMANENT - permission denied
Traceback (most recent call last):
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/wxgui.py", line 36, in <module>
from lmgr.frame import GMFrame
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/lmgr/frame.py", line 50, in <module>
from lmgr.layertree import LayerTree, LMIcons
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/lmgr/layertree.py", line 37, in <module>
from mapdisp.frame import MapFrame
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/mapdisp/frame.py", line 65, in <module>
class MapFrame(SingleMapFrame):
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/mapdisp/frame.py", line 71, in MapFrame
page = None, Map = Map(), auimgr = None, name = 'MapWindow',
**kwargs):
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/core/render.py", line 408, in __init__
self.mapfile = grass.tempfile(create = False) + '.ppm'
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 702, in tempfile
return read_command("g.tempfile", flags=flags,
pid=os.getpid()).strip()
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 425, in read_command
return handle_errors(returncode, stdout, args, kwargs)
File "/opt/src/grass-trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 308, in handle_errors
returncode=returncode)
grass.exceptions.CalledModuleError: Module run None ['g.tempfile', '-d',
'pid=27302'] ended with error
Process ended with non-zero return code 1. See errors in the (error)
output.
}}}
Latest trunk (r63504) has different error of same sort, `list_strings()`
fails when called from `prompt.py`.
{{{
MAPSET PERMANENT - permission denied
GRASS_INFO_END(27234,1)
Traceback (most recent call last):
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/wxgui.py", line 142, in <module>
sys.exit(main())
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/wxgui.py", line 134, in main
app = GMApp(workspaceFile)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/wxgui.py", line 49, in __init__
wx.App.__init__(self, False)
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7981, in __init__
self._BootstrapApp()
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py",
line 7555, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/wxgui.py", line 83, in OnInit
workspace = self.workspaceFile)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/lmgr/frame.py", line 135, in __init__
self.notebook = self._createNoteBook()
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/lmgr/frame.py", line 301, in _createNoteBook
gcstyle = GC_PROMPT)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/gui_core/goutput.py", line 104, in __init__
self.cmdPrompt = GPromptSTC(parent=self, menuModel=self._menuModel)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/gui_core/prompt.py", line 137, in __init__
GPrompt.__init__(self, parent = parent, menuModel = menuModel)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/gui_core/prompt.py", line 56, in __init__
self.mapList = self._getListOfMaps()
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/gui/wxpython/gui_core/prompt.py", line 96, in _getListOfMaps
result['raster'] = grass.list_strings('raster')
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 1108, in list_strings
mapset=mapset).splitlines():
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 425, in read_command
return handle_errors(returncode, stdout, args, kwargs)
File "/home/vpetras/dev/grass/trunk/dist.x86_64-unknown-linux-
gnu/etc/python/grass/script/core.py", line 308, in handle_errors
returncode=returncode)
grass.exceptions.CalledModuleError: Module run None ['g.list', '--q',
'-m', 'type=rast'] ended with error
Process ended with non-zero return code 1. See errors in the (error)
output.
}}}
I think there is not point in fixing or improving any of these errors. The
GRASS session should not start when in text mode and the startup/welcome
window should not allow you to start in mapset where you cannot write
(according to GRASS rules and settings). I don't know what is the right
way of checking this? Is there a module for it? Or should we fix it in a
different way?
--
Ticket URL: <http://trac.osgeo.org/grass/ticket/2511>
GRASS GIS <http://grass.osgeo.org>