Commit c66a7312 authored by Marco Mariani's avatar Marco Mariani

SlapObject: extracted method _set_ownership

parent 07f25be4
...@@ -141,24 +141,33 @@ class Software(object): ...@@ -141,24 +141,33 @@ class Software(object):
finally: finally:
shutil.rmtree(cache_dir) shutil.rmtree(cache_dir)
def _set_ownership(self, path):
"""
If running as root: copy ownership of software_root to path
If not running as root: do nothing
"""
if os.getuid():
return
root_stat = os.stat(self.software_root)
path_stat = os.stat(path)
if (root_stat.st_uid != path_stat.st_uid or
root_stat.st_gid != path_stat.st_gid):
os.chown(path, root_stat.st_uid, root_stat.st_gid)
def _install_from_buildout(self): def _install_from_buildout(self):
""" Fetches buildout configuration from the server, run buildout with """ Fetches buildout configuration from the server, run buildout with
it. If it fails, we notify the server. it. If it fails, we notify the server.
""" """
root_stat_info = os.stat(self.software_root) root_stat = os.stat(self.software_root)
os.environ = getCleanEnvironment(logger=self.logger, os.environ = getCleanEnvironment(logger=self.logger,
home_path=pwd.getpwuid(root_stat_info.st_uid).pw_dir) home_path=pwd.getpwuid(root_stat.st_uid).pw_dir)
if not os.path.isdir(self.software_path): if not os.path.isdir(self.software_path):
os.mkdir(self.software_path) os.mkdir(self.software_path)
self._set_ownership(self.software_path)
extends_cache = tempfile.mkdtemp() extends_cache = tempfile.mkdtemp()
if os.getuid() == 0: self._set_ownership(extends_cache)
# In case when running as root copy ownership, to simplify logic
for path in [self.software_path, extends_cache]:
path_stat_info = os.stat(path)
if (root_stat_info.st_uid != path_stat_info.st_uid or
root_stat_info.st_gid != path_stat_info.st_gid):
os.chown(path, root_stat_info.st_uid,
root_stat_info.st_gid)
try: try:
buildout_parameter_list = [ buildout_parameter_list = [
'buildout:extends-cache=%s' % extends_cache, 'buildout:extends-cache=%s' % extends_cache,
...@@ -197,7 +206,6 @@ class Software(object): ...@@ -197,7 +206,6 @@ class Software(object):
shutil.rmtree(extends_cache) shutil.rmtree(extends_cache)
def createProfileIfMissing(self, buildout_cfg, url): def createProfileIfMissing(self, buildout_cfg, url):
root_stat_info = os.stat(self.software_root)
if not os.path.exists(buildout_cfg): if not os.path.exists(buildout_cfg):
with open(buildout_cfg, 'wb') as fout: with open(buildout_cfg, 'wb') as fout:
fout.write(textwrap.dedent("""\ fout.write(textwrap.dedent("""\
...@@ -207,7 +215,7 @@ class Software(object): ...@@ -207,7 +215,7 @@ class Software(object):
[buildout] [buildout]
extends = {url} extends = {url}
""".format(url=url))) """.format(url=url)))
os.chown(buildout_cfg, root_stat_info.st_uid, root_stat_info.st_gid) self._set_ownership(buildout_cfg)
def uploadSoftwareRelease(self, tarpath): def uploadSoftwareRelease(self, tarpath):
""" """
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment