[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