Ticket #3025: race condition when creating temporary directory.
When there's no mc-tmpdir and a user tries to start two mc sessions simultaneously, sometimes (in one out of ten attempts on my machine) one mc session emits the following error message: Cannot create temporary directory /tmp/mc-lars: File exists (17) Temporary files will be created in /tmp Press any key to continue... Steps to reproduce: # rm /tmp/mc-$(whoami) -rf # uxterm -e mc & uxterm -e mc Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
родитель
ff211e5fd3
Коммит
33c47b5734
@ -840,20 +840,20 @@ mc_tmpdir (void)
|
|||||||
|
|
||||||
canonicalize_pathname (buffer);
|
canonicalize_pathname (buffer);
|
||||||
|
|
||||||
if (lstat (buffer, &st) == 0)
|
/* Try to create directory */
|
||||||
|
if (mkdir (buffer, S_IRWXU) != 0)
|
||||||
{
|
{
|
||||||
/* Sanity check for existing directory */
|
if (errno == EEXIST && lstat (buffer, &st) == 0)
|
||||||
if (!S_ISDIR (st.st_mode))
|
{
|
||||||
error = _("%s is not a directory\n");
|
/* Sanity check for existing directory */
|
||||||
else if (st.st_uid != getuid ())
|
if (!S_ISDIR (st.st_mode))
|
||||||
error = _("Directory %s is not owned by you\n");
|
error = _("%s is not a directory\n");
|
||||||
else if (((st.st_mode & 0777) != 0700) && (chmod (buffer, 0700) != 0))
|
else if (st.st_uid != getuid ())
|
||||||
error = _("Cannot set correct permissions for directory %s\n");
|
error = _("Directory %s is not owned by you\n");
|
||||||
}
|
else if (((st.st_mode & 0777) != 0700) && (chmod (buffer, 0700) != 0))
|
||||||
else
|
error = _("Cannot set correct permissions for directory %s\n");
|
||||||
{
|
}
|
||||||
/* Need to create directory */
|
else
|
||||||
if (mkdir (buffer, S_IRWXU) != 0)
|
|
||||||
{
|
{
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
_("Cannot create temporary directory %s: %s\n"),
|
_("Cannot create temporary directory %s: %s\n"),
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user