|
|
|
@ -111,9 +111,28 @@ class ShellBase(object):
|
|
|
|
|
def mkdtemp(self, basefile=None, system=False, mode=None):
|
|
|
|
|
if not basefile:
|
|
|
|
|
basefile = 'ansible-tmp-%s-%s' % (time.time(), random.randint(0, 2**48))
|
|
|
|
|
basetmp = self.join_path(C.DEFAULT_REMOTE_TMP, basefile)
|
|
|
|
|
|
|
|
|
|
# When system is specified we have to create this in a directory where
|
|
|
|
|
# other users can read and access the temp directory. This is because
|
|
|
|
|
# we use system to create tmp dirs for unprivileged users who are
|
|
|
|
|
# sudo'ing to a second unprivileged user. The only dirctories where
|
|
|
|
|
# that is standard are the tmp dirs, /tmp and /var/tmp. So we only
|
|
|
|
|
# allow one of those two locations if system=True. However, users
|
|
|
|
|
# might want to have some say over which of /tmp or /var/tmp is used
|
|
|
|
|
# (because /tmp may be a tmpfs and want to conserve RAM or persist the
|
|
|
|
|
# tmp files beyond a reboot. So we check if the user set REMOTE_TMP
|
|
|
|
|
# to somewhere in or below /var/tmp and if so use /var/tmp. If
|
|
|
|
|
# anything else we use /tmp (because /tmp is specified by POSIX nad
|
|
|
|
|
# /var/tmp is not).
|
|
|
|
|
if system:
|
|
|
|
|
basetmp = self.join_path('/tmp', basefile)
|
|
|
|
|
if C.DEFAULT_REMOTE_TMP.startswith('/var/tmp'):
|
|
|
|
|
basetmpdir = '/var/tmp'
|
|
|
|
|
else:
|
|
|
|
|
basetmpdir = '/tmp'
|
|
|
|
|
else:
|
|
|
|
|
basetmpdir = C.DEFAULT_REMOTE_TMP
|
|
|
|
|
basetmp = self.join_path(basetmpdir, basefile)
|
|
|
|
|
|
|
|
|
|
cmd = 'mkdir -p %s echo %s %s' % (self._SHELL_SUB_LEFT, basetmp, self._SHELL_SUB_RIGHT)
|
|
|
|
|
cmd += ' %s echo %s echo %s %s' % (self._SHELL_AND, self._SHELL_SUB_LEFT, basetmp, self._SHELL_SUB_RIGHT)
|
|
|
|
|
|
|
|
|
|