[devel] Re: Ошибка в shadow-utils (userdel)

Mikhail Zabaluev =?iso-8859-1?q?mhz_=CE=C1_alt-linux=2Eorg?=
Сб Окт 13 00:44:29 MSD 2001


Hello Sergey,

On Fri, Oct 12, 2001 at 02:08:37PM +0400, Sergey N.Yatskevich wrote:
>
> Привет всем!
> 
> В userdel обнаружилась ошибка. Там для пущей безопасности при
> удалении с ключем -r домашней директории проверяется не
> будет ли заодно удалена домашняя директория еще какого-нибудь
> пользователя.
> 
> Делается это путем:
> strncmp ('дир.уд.польз.', 'дир.другого польз', strlen ('дир.уд.польз.'));
> Оно бы нормально работало, если бы имена директорий завершались '/'.
> 
> Однако это не так и поэтому при существовании двух пользователей:
> 
> test
> test2
> 
> При попытке сделать userdel -r test будет выдано сообщение об ошибке :-))
> и директория /home/test удалена не будет.
> 
> Патч для исправления прилагается (+ подправленный spec).


Позвольте мне немного программерского занудства.

+ /* check if s1 is s2 or it's path prefix */
+ return ((strcmp (s1, s2) == 0) ||
+               ((strlen (s2) > strlen (s1))        &&
+                (strncmp(s2, s1, strlen(s1)) == 0) &&
+                (s2[strlen (s1)] == '/')));

Здесь три раза вычисляется strlen(s1). Нехорошо.
И вызов strcmp, пожалуй что, лишний.
Лучше так:


size_t s1len;

...

s1len = strlen(s1);
return (strncmp(s2, s1, s1len) == 0 &&
        (s2[s1len] == '\0' ||
         s2[s1len] == '/'));


P.S. А если у кого-то домкаталог записан через точечки? А если через
символьные ссылки? Впрочем, кара за подобное непотребство должна быть
суровой :)

-- 
Stay tuned,
  MhZ                                     JID: mookid на jabber.org
___________
Woolsey-Swanson Rule:
	People would rather live with a problem they cannot
	solve rather than accept a solution they cannot understand.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 232 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20011013/9fb64939/attachment-0001.bin>


Подробная информация о списке рассылки Devel