[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Fwd: umask и гемморой с ним



At Thu, 11 Mar 2010 17:12:57 +0300,
Artem Chuprina wrote:
> Вот, собственно, и ответ.  Я так понимаю, что у gnome commander ноги
> растут все из того же mc.
> 
> Впрочем, насколько я представляю себе mc, у него хотя и есть
> противоестественный интеллект, но он обычно настраивается.  Копать
> туда.  Может, те, кто им пользуется, подскажут более конкретно.  Что
> до gnome commander, то если его делали так же, как все обычно делают
> к гному, то может и не настраиваться.

Я там покопался сейчас - по итогам обширной личной переписки с ориг. постером. 
Этот интеллект настраивается через vim edit/editcmd.c и никак иначе.

Для существующих файлов эта собака устраивает песни и пляски с mkstemp(),
поэтому ей приходится делать явный chmod(). А во имя экономии умственных усилий
такой же chmod() делается и при записи совершенно нового, с иголочки, файла,
для которого mkstemp ни к чему.

В общем, на всякий случай привожу, ткскзть, скетч патча. Вдруг кто соберётся 
доделать по-человечески и отправить куда следует.

diff -Naurd mc-4.7.0.1.old/edit/editcmd.c mc-4.7.0.1/edit/editcmd.c
--- mc-4.7.0.1.old/edit/editcmd.c	2009-12-30 21:58:49.000000000 +0300
+++ mc-4.7.0.1/edit/editcmd.c	2010-03-11 17:40:30.000000000 +0300
@@ -578,7 +578,9 @@
 			return 0;
 		    }
 		} else {
-		    edit->stat1.st_mode |= S_IWUSR;
+		    int um = umask(0);
+		    edit->stat1.st_mode |= S_IWUSR | S_IWOTH | S_IWGRP &~ um;
+		    umask(um);
 		}
 		save_lock = edit_lock_file (exp);
 	    } else {
@@ -1888,7 +1890,7 @@
 
     if ((file =
 	 mc_open (filename, O_CREAT | O_WRONLY | O_TRUNC,
-		  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | O_BINARY)) == -1)
+		  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | O_BINARY)) == -1)
 	return 0;
 
     if (column_highlighting) {


Reply to: